{
  "lighthouseVersion": "13.0.3",
  "requestedUrl": "https://desmoinesregister.com/",
  "mainDocumentUrl": "https://eu.desmoinesregister.com/",
  "finalDisplayedUrl": "https://eu.desmoinesregister.com/",
  "finalUrl": "https://eu.desmoinesregister.com/",
  "fetchTime": "2026-04-22T20:44:21.638Z",
  "gatherMode": "navigation",
  "runWarnings": [
    "The page may not be loading as expected because your test URL (https://desmoinesregister.com/) was redirected to https://eu.desmoinesregister.com/. Try testing the second URL directly."
  ],
  "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/146.0.0.0 Safari/537.36",
  "environment": {
    "networkUserAgent": "Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Mobile Safari/537.36",
    "hostUserAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/146.0.0.0 Safari/537.36",
    "benchmarkIndex": 1160,
    "credits": {
      "axe-core": "4.11.2"
    }
  },
  "audits": {
    "is-on-https": {
      "id": "is-on-https",
      "title": "Uses HTTPS",
      "description": "All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding [mixed content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content), where some resources are loaded over HTTP despite the initial request being served over HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. [Learn more about HTTPS](https://developer.chrome.com/docs/lighthouse/pwa/is-on-https/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "Insecure URL"
          },
          {
            "key": "resolution",
            "valueType": "text",
            "label": "Request Resolution"
          }
        ],
        "items": []
      }
    },
    "redirects-http": {
      "id": "redirects-http",
      "title": "Redirects HTTP traffic to HTTPS",
      "description": "Make sure that you redirect all HTTP traffic to HTTPS in order to enable secure web features for all your users. [Learn more](https://developer.chrome.com/docs/lighthouse/pwa/redirects-http/).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "first-contentful-paint": {
      "id": "first-contentful-paint",
      "title": "First Contentful Paint",
      "description": "First Contentful Paint marks the time at which the first text or image is painted. [Learn more about the First Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/first-contentful-paint/).",
      "score": 0.17,
      "scoreDisplayMode": "numeric",
      "numericValue": 4320.988629999999,
      "numericUnit": "millisecond",
      "displayValue": "4.3 s",
      "scoringOptions": {
        "p10": 1800,
        "median": 3000
      }
    },
    "largest-contentful-paint": {
      "id": "largest-contentful-paint",
      "title": "Largest Contentful Paint",
      "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn more about the Largest Contentful Paint metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-largest-contentful-paint/)",
      "score": 0.09,
      "scoreDisplayMode": "numeric",
      "numericValue": 6469.622129999999,
      "numericUnit": "millisecond",
      "displayValue": "6.5 s",
      "scoringOptions": {
        "p10": 2500,
        "median": 4000
      }
    },
    "speed-index": {
      "id": "speed-index",
      "title": "Speed Index",
      "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more about the Speed Index metric](https://developer.chrome.com/docs/lighthouse/performance/speed-index/).",
      "score": 0.6,
      "scoreDisplayMode": "numeric",
      "numericValue": 5198.262847191201,
      "numericUnit": "millisecond",
      "displayValue": "5.2 s",
      "scoringOptions": {
        "p10": 3387,
        "median": 5800
      }
    },
    "screenshot-thumbnails": {
      "id": "screenshot-thumbnails",
      "title": "Screenshot Thumbnails",
      "description": "This is what the load of your site looked like.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "filmstrip",
        "scale": 3224,
        "items": [
          {
            "timing": 403,
            "timestamp": 1574333861804,
            "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAHyAPoDASIAAhEBAxEB/8QAFwABAQEBAAAAAAAAAAAAAAAAAAIGCP/EAB0QAQEAAwACAwAAAAAAAAAAAAACE1KRAQMSM3H/xAAUAQEAAAAAAAAAAAAAAAAAAAAA/8QAFBEBAAAAAAAAAAAAAAAAAAAAAP/aAAwDAQACEQMRAD8A6pAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5I3npkjeegoTkjeemSN56ChOSN56ZI3noKE5I3npkjeegoTkjeemSN56ChOSN56ZI3noKE5I3npkjeegoTkjeemSN56ChOSN56ZI3noKE5I3npkjeegoTkjeemSN56ChOSN56ZI3noKE5I3npkjeegoTkjeemSN56ChOSN56ZI3noKE/ONp6oGVAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXr+yf3w1AA//2Q=="
          },
          {
            "timing": 806,
            "timestamp": 1574334264804,
            "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAHyAPoDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAj/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AKpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9k="
          },
          {
            "timing": 1209,
            "timestamp": 1574334667804,
            "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAHyAPoDASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAj/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AKpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//9k="
          },
          {
            "timing": 1612,
            "timestamp": 1574335070804,
            "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAHyAPoDASIAAhEBAxEB/8QAHAABAAIDAQEBAAAAAAAAAAAAAAUGAwQHAgEI/8QARxAAAQMDAgMFBQYEAwYEBwAAAQACAwQFERIhBjFBBxMiUWEUMnGBkRUjUpKhsUJiwdEWJDMXU3Ki4fA0Q1SCCGNzdJPS8f/EABkBAQADAQEAAAAAAAAAAAAAAAABAgMEBf/EAC0RAQACAQMEAQMDAwUAAAAAAAABAhEDITEEEhNBUTJhkRQioVJi0XGxweHw/9oADAMBAAIRAxEAPwD9UoiICKrScR31sjmt4Kuz2gkBwq6PB9d5lMWOvrK+nkkr7TU2uRrtLY6iWKQuGPeBjc4Y6bnOyCRRc27XWxG6cK+3trnWoVE3tXsglLsd34c934vewqm2+8cWizWuCJlXBTSCofDNWQPllIEn3UcuGPcDp6YBPnsg7qi5xwxfeIqjtCqaC6966jMZc1sNOWwxYa3ZznsDs5JwQ4g+QVVuNHxXJxHxXBaxVm33arNG+Q5xSNa1jjI30LXSN26gIO4oCDyOVwu38RcX2212WlpWVTSyhpTTwOonTe2vc7EofJjwaR6jzWSK5cU0j6mmtT5aGP2m6ykijD9XdFrohuOu4z1yp2wic524dwRceouLOM6niWgikhZTU8jKZ3dSUryyZr4wZHZawkEOJ/iAGMEKxdlN5vd1bdGX91RJLC9umR0HdRHOchmWtdttkEEjz3UJX9ERAREQEREBERAREQEREBERAREQEREBERAREQcpqOCJnzyP/wADcPv1OJ1OvtQCd+ZHcbK5cC2h9mt9RC+z0VpL5dfdUlY+pa/YDUXPY0g7YxjorIiCkdpNyrqGezRUE1VG2d8vetpWtMjg1mdtWygqHj2609BbIpqeGsqZKcVEjy8N7xpeQAMbBwA39dl1CSCKWSOSSNjnxkljiMlpIwceS1zaqAtiaaOnLYiXRjux4CeZHku/S6rRrp1pfTzj3+f8x+Hma3R9RbVtqaerjPr8f4n8qDPx5VT3KWhEEETJJJoAwSkTx6GE6iMbZI2/qlj4uuA+yKExxaJ6ZmiaeQvdJIWE7kcjnHMb77q2M4WtwvbrpKJpqjLi1sshcxhIwcD4beilI7dRxzRyx0sLZY26GPDAC1vkD0CtfqOlisVpp+v53Z6fS9ZNu6+p7/jb/v8A9s5tRcd3WCxWx0zKarrKp8w16tIaGH3XADZxz9N1ZuHOJLher9UUwooYKOniiklcZMvBkj1ADAwd87+SsD7Vb3xvjfRU7mPf3jmmMYc78R9fVbENNBDI+SKJjHvADnNbguwMDPwCrq9RoXie3TxM598ZnP8AEbfy10Ol6mlq9+rmIx65xH/M7/wyoiLgekIiICIiAiIgIiICIiAiIgIiICIiAiIgIiIKDR3O6vg+9qXAH/zMnI+GWgEKx0jpizU+olkz11bBYJKingiLpRhudJOM7qPgvkZrWwlpDSS0BrDzHry//hV9lZiVgaXH+OT8xX3Ls+/J+YrE2Vo/iB+BWQblJwjfL2NWPff+Yr74vxyfmK+L03Kqnd90n8cn5ymk/jk/OU3816HJDd80/wAz/wA5TT/M/wDOV6RDEvgZ/NJ+cr1o/mf+cp0X0bobvmj+Z/5ygZv70n5yvQ2XofEInd5EY/E/85Tux+J/5yvYX1Qlj7sfif8AnKd2PxP/ADlZEQY+7H4n/nKGIdHP/Of7rIgQY+5/nf8AnP8AdBF5uf8AnKyogx90PxSfnKd0PxSfnKyIgx90PxSfnKd0PxSfnKyIgx90PxSfnKd0PxSfnKyIgx90PxSfnKd0PxSfnKyIgx90PxSfnKd0PxSfnKyIg5PfOJrTLNSRRV8OiU5eGyY39f1/Zc94w4pNDUvNBUwlmcd5FJuxpxjT67H6rnhvPeGoMcZM+DG3IBEYB3ySOfNRVMJmU7Aw5Gr+Lod1S19mlaOwcN9ppttVDS1ToZKVkRa1wyXk5236hdosV4iraGGeWWNhlYHhrntyMjPQr8l2mKNshmc4McPDyz9FO01W5oHdTcxjLk0pzuatcbP1X7XAG6zKwNHXUF8fcKSOXun1MDZPwmQZ+mV+W21crSXOmkc3qCdls0lW6qqWxxuOpzgNTjkhabTzKkxMP1I2Vjhlrgfgcr01wJ2/dcSssEjYvvJ5fAc/dvIHp1UzS3WW3iWankqDtkgv1a+vJVm0ZxBMTEZl1V7w1jj5DK+MeCM5Bz5Ffn68doFbWteJZXtaDhrAC3453UNHxNLkYqJ9Q3OH4BVu2Vcv0v7XT95o76LXnGnWMrw+5UcUzIZKmFsr/daXjJX5ulu0cju9gMwd11SeIn4rBJc2SSNeWnvG7ZfJnCnEJ3fpr7QpNGv2iHRnGrWMfusjaqFzgGvac8iCF+Y317pj4JAzPNodgfFbUFyq4NIZO3zbh24Ttj5H6ZDwB6IJATgbnyX54be67Th1wfpxnSJHLbbxLVxuzFcJGZAB8ZyowO+61870DmQPiuFw8W3BjdDLmcdcv3WpU8QVUshM9VJISc7uTA/QGsbeqGQAgHG/quAw8SzamtjqpARvjXyWw6+TyluqokcW8svOyRA7trCGVoAJOM7hcKivU7SXMqpGkc8SFe38QSvxrq5DjlqkOyntj5Hb2VUMkZkjlY5g5uDhgL02VrsFpBadwQuGxXc6HRMqHBh95odssjb1K2PTHVSBuMY1nCdv3HcQ8Hkcr5rGcdVxCG81Ebw8VT2fzNeV8lvNQ+QvdVSOP4tZSY+47f3gyckDBXwzx5xraT5ZC4VJeyCGy1RGfNxXmO5xYLm1Dc+epRj7mJd57xu2/NfdYXCPtYO0tFaeeQA8rZddqo7OrpcDoZT/AHTA7Y6RrckkAeq+d/H+Nv1XC5bo4uLX1byXeb85X3vnf77/AJkwPz+KeV7tcMgER5BoOAPVbEsroqZ2gtDycOJ5Aem6n7hLmRuZGFo2IxknyyenVQ00jpZZGxwiUjk7kPkubOZdMRiMPtslnfDIzAeWP0uPl8Fvxlz2nxtOCdgN9lH2ISR1T2FhBOMtaDjOcZwVI1k7vaTq0tcdmNGBkfAbJWe2MItHclLdKQHd4RGxoA1FSlPUiL/MRGOURkEgO0n9QoOjo3T08z5dR1DQGMj6jrleqWsZRVUVLGycsOxLmAf99VM2RFfl1Oy1zJ6HU10AlPhOh5c0O35nHwX1tTUl4aaA93nc957vqNt/hlVex0/sVXM5r4W0Moy5pk2afMKYlvUlDAx1NE+tZqwTC0uOPkFET3b05RE4j93CP4nsTKt8bqSnaJHf6haD+uNgqTcKZ9tJbO17Xg+HSw4+pXYxXZBkbUQAAZIc3GP1UPZOJ7ZxNU1FLRvbUVMTPE1zMDB/lJweSmuvaI3jhE6cZ2lyKa4Pc4YLgAPJYfbHA5ySV22Xh63RU4LovvnY1ODQA48s6TsPkVpS8NQSzOeaOmexpwDhoJHnj/qp/U1PDM+3JPtEgjSTgea+faUmrIcQusTWenYQ37EjeDtlsLT+y1J7fTNcCLM8N/8Asyf2arfqKz6T4J+XMjcJXOB1lejWvJBc8roMrrVA7L6B5DfeAowCPkRlfXusRjYTSAF2+DA3+ymdeI9IjRmfahx1rgAdZWw65SaQ3Vsd91faelstQw6KaEsHUMbt6bLHVWqynTqga0O6hoGf0UeespnQtCiC5lp8Lt+uFl+1XuABfsArqeHrN/6bI6nOFjHD9kBdmBwaP/mFW8tFPFZUm3bw4YQNsbLwLm7P+oB8Vbhw/ZMgGFzR596cn5LweHrKXnAc1o5kSZUeaifFdWPtRwwQ8jPyWR102bvuPVWF1gsbc66l0bcczIOS1xZOHXO0tuLnO/leD/RPNT5T4r/CE+1TvqcD818bdnnbXsPVTkli4fZubhKB6kLWlt/C8bXE3WQ6eekAp5qfJ4r/AAiJLhrcS45+a+sr2u22WxMOFoxk3Gr/ACBYHu4cbuyqq3/Qf0Ty0PHZ59uc0eFxwvE1yLR751fFezV8PDUY/aZGjoX4z9AsXt1iLS91JIW5GC6Q5UeaPUSnwz7mHh92DWggu1eeU+3D+M/mXh924eJe32GR2CMlpJwsP2tw5/6F/wBXJGt/bJ4f7oRzHHQJO6e3fU0vfqJ5fRbTO8Dm6gGvHIg8+Wwz818dA3UzvJH6xhzgRpA3/Vb0kUMEbdNU0E+YA59AsG2GJlMyKaebBaJsF2+Tt+y9XCahpfZzUE6dYDg3HmNlryuxUBokL2gE7HZbdLRsmeyRzTgA7FgIPqlp2REZbFZE+CNstnc8ku1uDgMEY3WNzqr2gT0zIpZyQ1zZXYDduYwpJtFloDQ4g74wsgpNO72kAfw6dyqd0QvNclLdbq1rhJZxKw/xwgaSeu6sNC+tkibJTwCmlftidx8vIFRL6uSGlaY4nBkeCRjfHUrOJ5nDaV4Dc432J6Fcl7TnZb7JSdle/wC7rqprRIMZig06fTJK1eHbFFYpTJQ173SObgtlw1xx69VqSXKo0R92HSNJ8bcA7Dn88rUgv8ZGt5b3QPhGDq9c4W+l1OpjFt4YW04icxstVZxnVWutpaV8VROJjguDdbWb4yThYJuMrq/iKGnhtubaS1ssoi3yR7wORsFo0PFVNM8Rd43/AIJTgH+ykZKq2yEa54qaVw21PAHyK6KeDUnGMSrNr1jlZG1jJDnvmsz1eMBQdz4yt9FVTQS1hfNCwuLYmZbkDJBOwHT6qKmuVJSuJ+0qU48pRuuJ8QcSTtvFcNTe7fMQAGg5BPmNuWPolOhis5mcwrbqpmMRs6kO2G1MrhTTxVsT9Ya49Bnrz9V0M3AEby+viK/JFdHTx3AS1EzpGSDIcwjUD6+RX6Z4brI6iz0so/zjJG5ZKxwOG9ARzyPmqdXoxpxFtOFtDVm0zF00KsEYHcuDuY7sHK+d6wxhjqSmdGD7vdgAE/BYCKN8gaHiJ/LBJYfoQvgtw1OcyRoJ55dz/RcHktHLow96aNoIkoI2gjfS4j9io6e3cPTHTJSSNPM6amQH91nqKWdo+4fTub1xJj9MKOqZKqJpMsTcdHA5Pz2Vo1p+Ve1lHDXDx1BklYxzuThUFxb8MlaM3A9rlcRHebi3O+C4EfsvRqHPw5xjI/75rO2RjS3W4YPPRv8AstK69oVmmUVL2ZQSu1w3+U46SsH/AEWtL2Y3Jo/yt6gf5AxD+6sHtcDnnuqvT6OKzMnqCSWSA+hWkdVaPSs6akVfZtxMG+Copp/Qlw/oor/AHEwnxLDTsb1cX7fTC6gLtUROIeAQB0dhfWcRzxkau9aDt5haR1ce4wjxzDkt54M4goaktp6b2uEtB1Qjb4EHfKiJbVdqRp7201rfUxFd3ZxMDkPcx4HPUwL06+xPYD7PSFx5ZcWq8dVSdpV7fh+eXS1DTpfFNEM8iwjn6lfDXeySyRTiMvHLVnyXXeL6CbiNlNEWU0cUUok1RvdlwwRg+m6q8XZbRVT531t1cxxJ7trcuawY65G+/wAFtGppTHKn7u5z+S5jUTGwNf8AyhaRuEmT4pF3+i4E4XZbqamd7JPKxgYZHtLXPIHMkHK+/wCzfhn/AHNJ/wDkd/dWi9fSZiXOGaDUZdLJK0kGV7ugA6YPms1LPA0yOkk8O5bnAIP0UfNQ040d/K98mXeLocY25817jt0cg1RzF8o6syAD+yw2a7pHvmF/eGUg6BhxGQRk8hj05raFzNO4COUuHNxcwnP0UNHSmaoJdJljAAQ3rzW7PHGwHwgYONLRjn18yondaMwkai4ytqYzDK+MebGDGD5hYJ7wGV2iWtm1EYAdTgj45DVHWyOZjiMSyPOcDXpAHxOcqdlgo6mkcyppHxSD/wAxrtyfNZTtK+8kdcWNcx8gePdaNLcEFRtRWPhcGNrqqOJ2Q1pjwG/y8ituSopqaBrR7RC6POXNDTqHPfIIKq914wAfI2mpoDEQWangjV64xj+qiKd08M7zEcylau4RmYwz3DJO2ljiRjHItCqN1r5IquWGmkY2NrtxGMB3y/oo6pudVWPe52mMyHxCFgbn+v6rEYJImCZzQ1mOvULq09Ls5c837uGx7dI6NrXOGoe6/wDiHpnyWZkFRUGLWyTMhwHnOD9VGEtDg5oP1XuWpklaxtRqfGzkC7AWsx8KTu6HZLRTMIjrbhUNldu1hj8JHo7cq2t4G4fqGf5yWd2rA98BpPxwuOU7JBplppXlsYGASc49FabFxj3LzHVte48hk9PgdllN9as/tnMLVrSeYXs9lNha/vqYSufz8chcCrBQ2x1poYqSmYGU8edIbvjJyoCzcSMcxr6aXDT/AAuI0/8ARWmivsEh7upY6J/LUR4fqlepidp2lrGlHMbvTahxZpcdceN9Q1A/IrLGyIFpZ9ztn7qUgH5bj9FsmKGcAgNPkWnl8+v6rVlo3sOWODt+Ttv1VrVi+0wmuIZ9ExAMcsUv8srC39RkfovD3SxMLpqWVreroj3g+g3+oWo58kZ8Yc0/zf3WZla5jc6nB4/75hctujpLXvfIhQVchDpmOdy07avpzXyotELWnu8jPMt2I/VZJZaaraBVwRT/AP1Iw4j5818ZSQFumlmqafyDJO8aPk7OPksLdHMfTKe6JaAtGdg4k+oWOW0zx7EyAjcFowpl1uvMURkayOsjG+HNMbh8jkfrha4utRRf+IpqmnaB4j7zfqMhYX0dXT5THbPEozuZ86fan7/wzMyD818xUxEa6eOUdHRvx8PgpunvNFUs1nu5GnkWtB/UL2X2uQO7wOYc5Ohxzn5rONSY5XisT7Vn2qAHRNDI2QH+MbLxqo3Nc8gaydiHYyrBPDTBwMVXPo/Cdv1BWrLBb2g63t1Dl4CSR8lp5Edv+ivyRxlwMMk4GNg0Z/ZaZq5IZSyKpJcOWoc1NTQ252+vQcY5/wB1gMdKcAVAePJ5/bdT5K8TDGYy0HXSobkv0EkbeMb/AKryb9ODj2T/AJVuy26CRrwwzsd0DHbfTO61fsxn+9n/ACpFqI7VPjdJVOjzCzRE6Qa5icOw49AtyClEDWF9SHFwADIiSMfRa8kFO17jFI9+s5A32JJzj026+iz1FrkNNB3NToAGDo20/wB+a9GV4YqdmnvpJ3OZ3khkA1E7Dbp8F5nmhafusOcfC0ncLV+zK1p/zFTqj0kggZ5LJT0eAyISanDBxnAGfioSkqSoha3UNpMAHI6KVihjrGBwlbGHN3z5qCdQzQgF8Y06sks3wPPC2ora+bDo5HFrvwclnfEbr1n1Lefw3R1r8VdW57yceHAx8OagncFW2KF8j5KiQgE5zttnyHop63Ujqao0vkc7Dg3BcM/upSOFsVK900ZIAwQBnHrjyxlYautauMSi2nSd8KBU2qCOGmltVLFHJI0lzpH5LfXB36KHgtzZKipZWSSSuixgDYEEZ2Cv1NRu9kqIC776mfoADQduhHlkEKDrqKWmkbdaOAmMYEwcd3N5YI8xutNLX9Zc81wp9Ta9FSYIXOeC3XESPeHl8VHOBcMFukjnsr9c6KOeAgvIkA1RkHOgnfmOnJQpoHXeaSN8YirYffdq2k5b489vmuqmr8s5p8K7SzupZA45+Kl5fZ7gQdAif1kYM5WV1mjke9s7i2Vnhc3H0K1TRy22qLJ/9Lo4cirzaLfSrETG0w2jJVWoNfjVA47Ebqw2/itjo2AyE5OCDywo+iJEB0aZ6d7fccdnf2KjpbWHPdJbSCW+9C/Z4/usrVrqbWWxNd6uoWe84IdBM5ozu3m35K00PEEcrhHUANdyznYrhlBW1VGWiohLMHcl23/RWq3Xglzcy4BOSCQ4fsss6mnxvDStonazr7DDM3LdIB6dFry0TCTpOj/hOR9CqJS3GZs+aary/mWOGG48x1W/UXK4Vrmw+2to2FvvtZnJ/wCLottPXpecTOJRNZjeu6wT08kI3Ac0b5adx8lE1vElJTz+wVVRA1s0ZLXOIyCOY/VR7uEJK8B0t7mkPTIJ/qtWo7MaOoJ9pq3PJ/i7vf65XbSKUnu7mN5veO3CJmNgo5Y7jU3G56alx7tsU7AcnmA0g45rpPC95oLpZxLaKmrkbTSGCZs2HvacZBIAx6fJUb/ZXbmtYX1dZM2M5a18mGg/9/BT9ntMNgbIKSF8HeYL3aidRA2OVPUa0akYwjQ0eyc5WV7aCdzjJSxSPdzc1uh/1C1qm1wTAGkrqimI5MlJe398/qtJ08sh1PeXHzK9tqZGDwuPz3XDbSrbmHXEsr7bXMAcGQVTB1ik3+h/uoyvlfT5MtvmGBkAjS7Pz2/VScdaQMkfNhW5Hc3A47xsjerXBc89HSZ22S5zcbz7ABK6nqNEryMSN2b8+q2/aYZXlsMsJGkOaCNJ3GfmrpVQWuu/8XRBjj/FGdP7KDruCLfWHVQ1zoz+GRoO/wARgpPTxKvahfaZ2w65GhrW5y7SDnBwfVZQ6YgHvR+R39liqOF73RROjjDpYcnJjeH/AKHBUY6mu+o/dHn1ics7dLCYrD5DVwRM7qlgDWDJOg6sZ57/ANytiCso2xGR8hc/OQzOonPotaOGrqDnvWwwHkyF2Ty5av8AoF8igid3jGMc8fx+I+I+eOq6ZiJaRlmLZKh2HkaTgd23LiB6kfsvTHRu1nwua04boaf6L5FCyCNwDXNDvdxnZa1LNJC18eNLC87uG2/lhMbYElFNCWsc4MDHbZGSPnsvFRE9rM0Msce/uAevqNlripiJaX6j5aW/99FvNmkc0iNrWEZGSc/TGwx8VXGOE5yy2Wvikrm07+8E0ZBcx2fr6qWa4gThz9GkuwCdt/3VKuNSaaaGq75kdSMtjcG7POcdP6hTlPc3ifvdTXxuAcXaC0td1wD0XN1OnmMwt3bbsU9RJTXdjpJGtjqgNZ/C8bf2WCOAS3Cojee8iLiMOOOfvDHPrlbt6p5K2kqYu8bJKfHAC5rTqB6EZ5hRVufFdKRjY2vFwgIDmySFuvHng5+azrxlnPOEVTTCjrJrfUFkJa4hhkbglvQ5Wrf2uo6mmq6Z8jyRh5B1NP8AT9VOVlqgusEjdD4aqM7FwLnMd5EkkkKOsUro6+e2XeOnbJCMiXZocenP+i6q39wytGNmB9wgu9KDE5kNwYCWvLsB3oem6wUs0lZHJRV8LHFo3ZtqZ/Mw9Qst9paiiqX3Ggax3iALWPDhI3zxscrORDfaKOWkcyKrgG72dB6A9PNTtEZjj/Y3mfugZKW4WmbvKcAwu2O3gd6H1WSGsjrCHxuMVTH/AAHmPgei3YtbXCnrHxuJI90Esf6g8h8FoXG0d2w1FOTkYOXP3Zv1AG4W1bRba3LOc13htG5sla6C5MdLGNhKPeZt1WhNHV27/MUb2VFJz1M5f+4dF8prnE+NtPXtDQQAyVp3Hqthrp6FzJIJmBpOzgctI/mHT5K2JrsiZ7mS3357pAJImxB3LJ2+RVgtvEAZMMzSPGPdyDz+HyVdrKSkuBh7tppa15OxbiJ/XOcdVrVFNcra4+1QubCerR4B6ByxvpVvuRaY3dXor2HvDYyMDYafCfmORVgpLrqaO85fyjf44XE6Gv0D33OaMDTtz9CrFDdZKZomZIZcAuLGjxD0WcTfS2rw074t9UOsw1Uco1Rv+i2PCQfC3B2I6H5LntFfzPAXOH3gGGu1aXjb9VM2y9uZQwSSNMsegNcW7uBx1HP5rop1Fbc7E0/pT81DTyg6AY3+bd/0WhLRyx50tEoH4Of05rbgrIKgB0b2PB8jutnXsMkHH6LfCuZhBF4zywR+izOqS9mJgyQD8Y3+owpKdsc5+8aH55l5w78398rRqLeGkGGTSSfdk2+juX1wkwtFmt30jD4C5rejScrLHV5P3kZPq0rVlbNTu0zscx3qvGtvxPn1VcJyl4a05xHNt+F//VZ/bpv93F9CoAuB5nV6O6L7/wC135kmq2XPXwVLA2Xv9AwNs4GfXmvFYZhEH97K0DbDC1oI/RX+fsq7Qg3uorLEWjdrva4jj03f/Ra8fZH2hP8A9W0v9T7bA35DDth81jFLfB3R8qPrILGyOnYDu3UcucfLfotmWpDYy6pc4EAnQx23IYBdz69FdIuxvjNoc91i1Tu21Or4vD9HLMzsf42ja8/ZTHPdt/4iE4+ruSmKWg7o+XOnQvlqGSmokJc0Fjd8HzG/NbVuc7v6gZmIB0uJ5DbyV/g7H+Lmd242Z3etbjV7XDt/z+f7rJR9j/FkNVJM6zvJc4u3rIsD5a1OJxwRaM8qXNLC5jHRvGwGnUM4K2a8vZDT1Esf3WsBxIGXtxzK6FT9mXE7Y+6ksQxz1Cpi5/nXp3ZnxW6j0yWaIuaSGsbPFuOh97osNSt8cNc0+VKc+N9DFIQ9zGEFpbkY36nyVfqJxR8TThrxh+CG7E4OOS6Mzsu42o5YzTW50sTgQ9pqotvX3xssF17KOL6uOmnNi7yojPiBqoQT6jx4/Vc9dK9Z+mcSztas8SoJq428TTSMmnimc4QOaG4AAHM7FeeMKSVldb7ix0QkY0hxxhz9/oeavNd2Q8YGpFwpbJmaVobNC6rhzkcng68ZW9D2Y8b1NJ3FbaGxaseIVMLiD+LGpa4vExaKz+EZjExlQLVWCu1942XT1LXHZ3yKgLhQVFFXCpoJI4ZNRyJMkyc+hHNXqDsW7QaOpmY23snhPibI2riaCfLGoFSrex/i6piaKux6ZGA4PtUWCcekiv2XrOYjZE2iYw5pRy015jcJHujqRk9204OrzGVkgk9icW1WZIj4TLrG23I4/qrJWdhnH1BXtqLRZY59Q8QdVQDH1eFL0/ZFx5UU2ivsDQ8jS4+1weJvkcP9eavbTnmI2Vi0Ty5xeOHo5SX04cwnLhFkBp/4egUCHS2p4ZLqdtlwLcFq7BSdivHcUToHW0dyDlhNXCXD/mX2v7HeOqiEsfYmyF2GlzauAED5uV6TeNpjMKWivpySR5npWSw6QGOwWk4Bz1x0PwWxSXiSGJsUpNRTPOnu5DkD0Vzg7Ce0KITtNgyCfB/nafB35/6i2T2GcfuMmbCzSW5H+dgJ1fnV5purEub3ig0RGWga5tO3d8ZJOk+e/RYrbdgA0TFsZH8XQ/HZdfp+xjjmSnxPYhHI6PS7/OQEZxjOz1WKfsI7TKSrEkfDscjWnk6spyHD4GRIp3RiYLTvsiKerFSAIRI95GS9ucfRbovc9DG0VMZdC0/6kH7OHPmukW3su4yEf3nCjKWV7SyRzaynIPkdnrLV9jPEs7pnfZj2yOGGObUQgDfqNe657ac8duzaI2zFt1FpL3TVuiWimHfMG2g6XZ9WndT1r4ncxzYq9v3nR3UrRd2I8dtOP8NNkIJw9tdAz5++t2n7Iu0VjGxyWITRjpLWU5IHlnXlWrGpT6eFe6J5WmluEdQ3VGQ4eXVbTZAR0weh3ChKLsx7QYA0ts2gNz4HVsJ+hD1YrfwVxxs2psZaMczVQH9nrorebcxhWcfLEQNAax2GnmwgOYfkVqTUULyctdEfxR+Jv05j9VM3SwXqx0XtN1oxBTlwZq71jvEeWwJ8lFiRpaCDjK0ghGTUE7GufHpljHNzPEB8eo+a0cu8v1VhDjqDvE145OYcFZe/d1k+sLT/AEUTCe5+kURFdkIipPF3FdRY+OuGbcXQstlbBWzVbntJc0QxhwIPTmcoLsi5vR9qkVQyKSWwXKmiraSartj5XMxWNjbqLdiSwkbjK1Zu2a0xsqi2hqX91boa9mHD710nd4hH8w71n1QdSRc/r+02jt/GFNYK+hkhlqJmUzZRVQvIkeMjMYdrDcnGogfBaDuP6/hj7KsvEtFJW3+oifUSuZNBC0s71zWhpcWtc/GPCN0HT0VU4840puD6S3y1NJJPJXTdxE3vWRMa7ST45HkNby89yoes7SpY7jBQUXDVxrauW3C5GKKWLwR6i05OrSeW2Cc5CDoaLld27bLBR09ulpoJan2qkFa5rpooTHHkjHjcNT8hw0tzyXq+9tXD9sqYWRRSVULqaKrlk76KIsjkbqaGse4Oe7G5DfMIOpIuScfdqE8Vk4h/wpQ1sxt0EZfdGNjMUEkgDm+Fxy4YIzscZ5KwceX+5Wu2cHy0NT3UlwvFFS1J0NdrjkzrbuNs+YwUF7RcmsnaVWxQU1PPQ1V5r66519LTthEcJa2A5DTk4xjrnO3Vbtk7Vqa+CiEVpuFDDcqaokoqqbu3NfJCDrbpDidiDueeEHTEXG+Ge0TiOruHBNGbaa+K60L56ioJjjdIQQC4AHDQ3OSOudldONOOqXhOvFPXUkr2PoJ62ORrgA90WMxAfiOoILgi5m3tftZo3VIoKt7G0dPOWRkF/fzPLGU+NvHlrt+WAsz+1KCmZPBcbNW0V0p6ympJ6KV7CWic+CQOaSHNQdGRcu4w4+qm1UlFZw+kmob/AEVuqJHBrxNHKNTgAQcbbea0eJO02uqnUB4eoK6nt775DbjcntidHOA/TI0NJLgDg4djp0QdfRVDjHjR3D18tNpprPV3StuTJXQx072twWYJyXEADBzn0VVi7Tn2imvc12ZLWuZxBNa6Vv3cDIg1ocA6QkNAG/iO5QdZRcy4i7X7ZYxQMqKCb2uppfbHwPqoI+7i1EDDi/S9xwcBpOQugWO6U16s9Hc6BxdS1cTZoyRg6XDIyPNBuoiIOXf/ABG1UtH2eCaAsEjayLGt2kHZ22V+erXxV3jmxTyCKUjOh/X4HkV+ju32x3riDgMUfDdL7VXtq45O6y0ZaA7PvbdQvzw7so42rmvbW8L1LDgYPfQkZ/Plc95vW+Y4WiVhpLj3jdTZDkjkW4W77a78Tv0Vapey7tHtel1Fa5aiAEfczTR6h8DqU23hLj3SM8KVecb/AH0P/wC60i2Y3W2fqtERaMxV++8J2+98QWq7VzpnS2+KohZCCO7kbM0NeHjGTsNsEKwKm8QcVVVr48tlmDaYUVVb6mqfJIDrD48YAOcYwTnZBj4d7N7TZLlSVbau5VraKN8VDT1k/eRUjH7ODBgdNtydlGUfY5w5S01sgjmry2grzXsLpGkvPg+7d4d2ARsAHPwjdV+3dpHFd4gsDLXTWQVVwtFRcZXTslDGOjkLcNw7OCANvM5z0WRvaTe+IYKKnstLa6WSWxm7Vb62R7RjJYWREctwTqOcILPP2XWmW+SXIV90ZruTbsaZsre69oB54Lc4PlnbphSPG/AtDxi5jbnW18dMGhj6eFzO7eAc58TSWn+ZpBx1XJ+HO0biG3cM8K2ax2/7Sr32n2+aSdkkzpB3rmho0kHpu45xkbK82fjLie88cUtop7dQUVILdT3CsbV6++i1kh8bcHBO2xIHLfPJBbeKeF4OIbZDQyVtZSQx7Ypywh4xjDmva5rh8R6qif7KnR8V0rbfX3G3WOlsooI56WqDZ3O70uLXZByCCTy54xjCz9qvaJc+E7m+GzwUVYylpW1dXC+KVz2sLiN3Nw1gONicnPReu2G61gs/BNZaZRDNU3yjLRLIWMcHMeQ2Qj+HllBKv7L7PE+3yWesudnno6UUQloZw10sQOdL9TSCcknOM5K2Lh2eUNTdvtKlut5t9XJBHT1L6SoDTUtYMNL8tPix1GCqNdeM7vW1lDbLoylZcLbxRR0c01BJI2CZkjHOGPFnI5FpJGeij+D7hWycZcIRyVdQ9kl6vbHtdK4hzWsOkEZ3A6eSC/8AEfZdar5U3SV9yu9HHc2NFZBS1AbHO5oAa9wLTvsPQ43CsF/4Xo73S2aCqlqGMtdZBWwmMgFz4vdDsg7HO+MLnHHV64gs/aleKmwupJGUXDIrJYaxzzHpZM8u0taffIGMrFdO1m/1Nygp+GbC2q0W6muE0b43vc/vmB+lpaQGgA41EHfogu1q7OrXbbjbqyCprXSUNXVVsYe5mHPqPfBw3kOn65WK2dmdot1FYaaGqr3MszapsBe9mX+0aterw741HGMeuVV+Iu1O6WziKOOnoaaa1xzU0FXGYpRLA+UNOl0nuB41e6AeXMclDcYcZcQXuhNRF9n0dnh4jhtzGRyvbVksmAJdvgh2Pd8vNB0Om7OLbSRcNijuFzp5bEx0VPNHKwOkjcQXMk8OCDgcgFJcZcGWzi2W0yXMztdbakVMXdOA18ssdkHLTgZG3ILmlr4wv1FWSUNojo5qi4cUVtCDWvle1jWsDgQdRIx5DboAM5W/Q9pXEFybZbXS0lphvtZW1lJNNOX+yt9n3cWgHUS4EYGdkFlg7LOH4bdfaPNW6O7VYrHu7wB8Dw7UzuiANIaScZzz6rzJ2W2ee2XGnrK661VbXSxTS3KacGpDoj93pdpwA3yx1Tgbie9cU8EXave23QXSCpqaaExh7oAYzhpO+XfEEZ9FTeD+M+KKXgHhZss9vrrpfKp1PS1NWZNMTRqJMx1EudtgAY6ILjB2W2qMTmS43WolnuMFzklmlY57pYhgZOnkeo+mF5l7KbQ6ubLHcbvFSMr23KOhZUN9nZMHaiQ0t5E52z1OMLY4T4vuN14Z4hqKykpjdbNPPSvFKXOhnfG3UCzO+DkDC51Y79daag4U4orL7e7l9r1EcdWyCogFJA97tIh7kjUMdXN38J8wg7JcOHaWu4ntV9llnbVW2OWOJjSNDhIADqGM9NsEKDn7O6B9HdKeK5XKBtxuEtxm0OjIL5AAWaXMLSzbYEHfqqxD2k3ySpp7h7HaxYqm8Gzsg1PNW12ssEjv4cZGS3GcdVn4V7RLveb7a7HNBQRXKCWrF78Dg2njhdhpYC7bUXN3JI5oJZnZXZ6WO2/ZNfdrZUUNMaRtRS1AD5Yi4uLX5aQfESdgMZV7o4BS0kNOJJJBEwMD5HanOwMZJ6n1XuGWOaJksL2yRvGpr2HIcPMFekBERAREQEREBERAUFxPYOHr2+kdxFR0VS6nJdAajHhzjON9wdsjkp1cX7cKCW5ce8FU0FrortIae4PFHWPLY5dLGHGQCc7beuOSDpVu4SsFF7I+gt8Mfs1M+kgLHOIZC86nNG/Inda9RwHwvU0lvpaiyUcsFvaWUzXtLu7aTktyTkj0OQuD2y/XmzcE8JUtvu/sVrrH1UlRUd6YW0sof4aYyGOUsDd9i3fzwrPfOKOLrBw/ZrvNXi5uu9BJbm+xgmIVhce4maHNaQXDY7AZHJB1Cq4B4Wq7fQUNTZKSSmoWllM1wOY2k5LQ7OcemcKUobDa6C4urqKiigqjTspdbARiJnusA5AD4LjHENZxTQVfFdPHxRXxOsFmpKsaQxwmn0EuLi5p2JByBjOR5LFxXxpfW11yllvdXaa2GkpZrNb4KYPZcHvYC/OWnX4jpwCMIOr3fhrhLii61JuNFbrhcaeMU841B0kbXDIa8A5HMkZ+IWzcrRw5xDG2zV8NFXttr45DRueHGA6SGFzQcjLScZ5hcZud6vNsuXHdZSOkoJ5q61Mr6iJneOo4XQ/evAwc6eXzWhQ3argq+0GtsXE/eky21rLnVgRGaPQ4FuvRpacAtDy3G2fVB3Ol4L4dpKGlo6a008VNS1Ta2JjMjTOOUmc5J365WWk4TsdJV0lVTW6KOopZpqiF4c7LJJhiRw3/AIlD9kd5mvvB0VXUS10zxNJHrqyxziGux4XsAD2+Tsbq6IIqt4dtNbW1dZVUUclTV0ZoJ5CTl8BJJYd+WSfVR9fwHwvcGULa2yUcwooW08GtuSyNow1hPMtA6HKsqIK1X8CcL19wkrquyUclXIWF0ukgksI0nbqMDfy2Xys4C4WrLrJcqmyUb66SRsrptJDi9pBDtuuQN+vVWZEEHDwlYoaqOpjt0TZ46t9ex+p2RO8Yc/nzI+Sr/GHZzR3mzst9qNFQR+1vrJBPSe0h8j/eIy4FpJ3yCPor4iCt9n/CdPwdw1HaaeY1H3j5pZSwMD3vOSQ0bNHQDyC8t4D4XbbKq3NslGKKpl7+WHT4S/o4fhI6YxhWZEGjZbRb7Jbo6G00kNJSR50xRNwMnmfU+qg6fs84Sp719rQ2ChZXiTvRIGbB/wCIN90H1wrUiCBZwdw7HxAb4yz0Yupdr9oDPFqxjV5avXmsrOF7Iyvula22we1XSPuayTBJmZjGk+mPLmplEGtbKCltdvp6G3wtgpKdgjiibya0cgtlEQEREBERAREQEREBfC0EgkDI5HyX1Vu+C/ScQU7LVJ3dGyESSF+NDnB+7fdJJLdsZHmgsXds040NxzxhQdz4Wt9zv9Fdq51VNJREOgp3THuGPGcSd3yLhqO5UJNdeJ6iKN7KGSBwDtQZCRl2kHGDk7HI1DZyyNuXE0L5C+mdPodODimIaG97GGOABy/DC8gAjOMcxlBdCxpzloOdjtzQsaSCWjI5bclB2ivuk9zqoK6lEdMyJro5hE5gc4gZByeec7DOMblbtukmqrDTSOlc2olp2uMjQM6i0HOMY/RBv6W7+Eb89ua+d2zBGhuDz2UFNNd47dbpIG66gUxfUMkjzreGA6dsYJOR/RfG3S5tnf3tE8wskw/TA/U0ZIGPx58JyBgZ39AsAAAwAAPIIoGlr7u60VNVUUrG1DWMMULYXZ1FjS7IzkgOLhgb+HqVGM4jupqaemfSQtrXtc72XQ7U4CN5DtRI0guaBgjO6C4otGz1FRU0z31Uegh5DCY3R624G+l27d8jfyz1W8gIiICIiAiIgIiICIiAiIgIiICIiAiIgIsGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzoo2sulPR1VJT1E2iWqcWRNwTkgfp0GT1IHMhYor9b5auWmjr6d00QBe0PG2dW2fPwOOOYAQS6KKN7t7S7VcaQaSA7MzdieWd+qww8R2uaPvI7jTd1/vDIA3mW8ztzBQTaKKlvdvhMgmuNJGYzpfqmaNJ32O+3I/RfW3mgc2NzbhSlsjtDCJW4c7yG+53GyCURQ/+ILaZIGNuNK908ndRhkjXan4LsbdcBSOt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mg8oiICIiAiIgIiICIiAiIgi7lY6S41PtFT3veta1rHNeRo0u1AgeeQDvn3QtL/CVuMUsT3VDo3tjja0vH3bGFxDWkDOMPcDnJIOMqwoggqThe20lfJVwR6ZXzd/s1gw7JJ3DdRGXE7k+mF5qOFqKojex81T4jsQ5uWDU52GnTtu92/P1U+iCv03CVrpqmWeKNzXySOkOA0HLg8HxadR99x3J6YXl3B9qdU087o3OkhcHNLwx/JrG48TTj/TbuMHnvurEiCGh4do4JKOSF87H0ojEZDhyYHtAO3USOB/oplEQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREH//Z"
          },
          {
            "timing": 2015,
            "timestamp": 1574335473804,
            "data": "data:image/jpeg;base64,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DCY3R624G+l27d8jfyz1W8gIiICIiAiIgIiICIiAiIgIiICIiAiIgIsGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzoo2sulPR1VJT1E2iWqcWRNwTkgfp0GT1IHMhYor9b5auWmjr6d00QBe0PG2dW2fPwOOOYAQS6KKN7t7S7VcaQaSA7MzdieWd+qww8R2uaPvI7jTd1/vDIA3mW8ztzBQTaKKlvdvhMgmuNJGYzpfqmaNJ32O+3I/RfW3mgc2NzbhSlsjtDCJW4c7yG+53GyCURQ/+ILaZIGNuNK908ndRhkjXan4LsbdcBSOt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mgzosGt3mmt3mg8oiICIiAiIgIiICIiAiIgi7lY6S41PtFT3veta1rHNeRo0u1AgeeQDvn3QtL/CVuMUsT3VDo3tjja0vH3bGFxDWkDOMPcDnJIOMqwoggqThe20lfJVwR6ZXzd/s1gw7JJ3DdRGXE7k+mF5qOFqKojex81T4jsQ5uWDU52GnTtu92/P1U+iCv03CVrpqmWeKNzXySOkOA0HLg8HxadR99x3J6YXl3B9qdU087o3OkhcHNLwx/JrG48TTj/TbuMHnvurEiCGh4do4JKOSF87H0ojEZDhyYHtAO3USOB/oplEQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREH//Z"
          },
          {
            "timing": 2418,
            "timestamp": 1574335876804,
            "data": "data:image/jpeg;base64,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"
          },
          {
            "timing": 2821,
            "timestamp": 1574336279804,
            "data": "data:image/jpeg;base64,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"
          },
          {
            "timing": 3224,
            "timestamp": 1574336682804,
            "data": "data:image/jpeg;base64,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"
          }
        ]
      }
    },
    "final-screenshot": {
      "id": "final-screenshot",
      "title": "Final Screenshot",
      "description": "The last screenshot captured of the pageload.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "screenshot",
        "timing": 3224,
        "timestamp": 1574336683157,
        "data": "data:image/jpeg;base64,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"
      }
    },
    "total-blocking-time": {
      "id": "total-blocking-time",
      "title": "Total Blocking Time",
      "description": "Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. [Learn more about the Total Blocking Time metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-total-blocking-time/).",
      "score": 0.38,
      "scoreDisplayMode": "numeric",
      "numericValue": 763.5463080444333,
      "numericUnit": "millisecond",
      "displayValue": "760 ms",
      "scoringOptions": {
        "p10": 200,
        "median": 600
      }
    },
    "max-potential-fid": {
      "id": "max-potential-fid",
      "title": "Max Potential First Input Delay",
      "description": "The maximum potential First Input Delay that your users could experience is the duration of the longest task. [Learn more about the Maximum Potential First Input Delay metric](https://developer.chrome.com/docs/lighthouse/performance/lighthouse-max-potential-fid/).",
      "score": 0.02,
      "scoreDisplayMode": "numeric",
      "numericValue": 662,
      "numericUnit": "millisecond",
      "displayValue": "660 ms"
    },
    "cumulative-layout-shift": {
      "id": "cumulative-layout-shift",
      "title": "Cumulative Layout Shift",
      "description": "Cumulative Layout Shift measures the movement of visible elements within the viewport. [Learn more about the Cumulative Layout Shift metric](https://web.dev/articles/cls).",
      "score": 0.08,
      "scoreDisplayMode": "numeric",
      "numericValue": 0.656139,
      "numericUnit": "unitless",
      "displayValue": "0.656",
      "scoringOptions": {
        "p10": 0.1,
        "median": 0.25
      },
      "details": {
        "type": "debugdata",
        "items": [
          {
            "cumulativeLayoutShiftMainFrame": 0.656139,
            "newEngineResultDiffered": false
          }
        ]
      }
    },
    "errors-in-console": {
      "id": "errors-in-console",
      "title": "Browser errors were logged to the console",
      "description": "Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. [Learn more about this errors in console diagnostic audit](https://developer.chrome.com/docs/lighthouse/best-practices/errors-in-console/)",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "sourceLocation",
            "valueType": "source-location",
            "label": "Source"
          },
          {
            "key": "description",
            "valueType": "code",
            "label": "Description"
          }
        ],
        "items": [
          {
            "source": "javascript",
            "description": "Access to fetch at 'https://user.desmoinesregister.com/PDEM-GUP/user/' from origin 'https://eu.desmoinesregister.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.",
            "sourceLocation": {
              "type": "source-location",
              "url": "https://eu.desmoinesregister.com/",
              "urlProvider": "network",
              "line": 0,
              "column": 0
            }
          },
          {
            "source": "security",
            "description": "Error with Permissions-Policy header: Parse of permissions policy failed because of errors reported by structured header parser."
          },
          {
            "source": "network",
            "description": "Failed to load resource: net::ERR_FAILED",
            "sourceLocation": {
              "type": "source-location",
              "url": "https://user.desmoinesregister.com/PDEM-GUP/user/",
              "urlProvider": "network",
              "line": 0,
              "column": 0
            }
          }
        ]
      }
    },
    "server-response-time": {
      "id": "server-response-time",
      "title": "Initial server response time was short",
      "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more about the Time to First Byte metric](https://developer.chrome.com/docs/lighthouse/performance/time-to-first-byte/).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 397,
      "numericUnit": "millisecond",
      "displayValue": "Root document took 400 ms",
      "metricSavings": {
        "FCP": 300,
        "LCP": 300
      },
      "details": {
        "type": "opportunity",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "responseTime",
            "valueType": "timespanMs",
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "url": "https://eu.desmoinesregister.com/",
            "responseTime": 397
          }
        ],
        "overallSavingsMs": 297
      },
      "guidanceLevel": 1
    },
    "interactive": {
      "id": "interactive",
      "title": "Time to Interactive",
      "description": "Time to Interactive is the amount of time it takes for the page to become fully interactive. [Learn more about the Time to Interactive metric](https://developer.chrome.com/docs/lighthouse/performance/interactive/).",
      "score": 0.25,
      "scoreDisplayMode": "numeric",
      "numericValue": 10162.260096088867,
      "numericUnit": "millisecond",
      "displayValue": "10.2 s"
    },
    "user-timings": {
      "id": "user-timings",
      "title": "User Timing marks and measures",
      "description": "Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. [Learn more about User Timing marks](https://developer.chrome.com/docs/lighthouse/performance/user-timings/).",
      "score": null,
      "scoreDisplayMode": "notApplicable",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "name",
            "valueType": "text",
            "label": "Name"
          },
          {
            "key": "timingType",
            "valueType": "text",
            "label": "Type"
          },
          {
            "key": "startTime",
            "valueType": "ms",
            "granularity": 0.01,
            "label": "Start Time"
          },
          {
            "key": "duration",
            "valueType": "ms",
            "granularity": 0.01,
            "label": "Duration"
          }
        ],
        "items": []
      },
      "guidanceLevel": 2
    },
    "redirects": {
      "id": "redirects",
      "title": "Avoid multiple page redirects",
      "description": "Redirects introduce additional delays before the page can be loaded. [Learn how to avoid page redirects](https://developer.chrome.com/docs/lighthouse/performance/redirects/).",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 1526.9509999999996,
      "numericUnit": "millisecond",
      "displayValue": "Est savings of 1,530 ms",
      "metricSavings": {
        "LCP": 1550,
        "FCP": 1550
      },
      "details": {
        "type": "opportunity",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "wastedMs",
            "valueType": "timespanMs",
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "url": "https://desmoinesregister.com/",
            "wastedMs": 774.3349999999998
          },
          {
            "url": "https://www.desmoinesregister.com/",
            "wastedMs": 752.6159999999998
          },
          {
            "url": "https://eu.desmoinesregister.com/",
            "wastedMs": 0
          }
        ],
        "overallSavingsMs": 1526.9509999999996
      },
      "guidanceLevel": 2
    },
    "image-aspect-ratio": {
      "id": "image-aspect-ratio",
      "title": "Displays images with correct aspect ratio",
      "description": "Image display dimensions should match natural aspect ratio. [Learn more about image aspect ratio](https://developer.chrome.com/docs/lighthouse/best-practices/image-aspect-ratio/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "displayedAspectRatio",
            "valueType": "text",
            "label": "Aspect Ratio (Displayed)"
          },
          {
            "key": "actualAspectRatio",
            "valueType": "text",
            "label": "Aspect Ratio (Actual)"
          }
        ],
        "items": []
      }
    },
    "image-size-responsive": {
      "id": "image-size-responsive",
      "title": "Serves images with low resolution",
      "description": "Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. [Learn how to provide responsive images](https://web.dev/articles/serve-responsive-images).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "displayedSize",
            "valueType": "text",
            "label": "Displayed size"
          },
          {
            "key": "actualSize",
            "valueType": "text",
            "label": "Actual size"
          },
          {
            "key": "expectedSize",
            "valueType": "text",
            "label": "Expected size"
          }
        ],
        "items": [
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/11/13/PDEM/87257756007-norwalk-bucees-cs-4.jpg?crop=8639,4861,x0,y449&quality=50&width=420",
            "node": {
              "type": "node",
              "lhId": "1-111-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,A,0,DIV,0,PICTURE,3,IMG",
              "selector": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo",
              "boundingRect": {
                "top": 56,
                "bottom": 288,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 232
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/11/13/PDEM/872…\" alt=\"\" class=\"p2-photo\">",
              "nodeLabel": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo"
            },
            "displayedSize": "412 x 232",
            "actualSize": "420 x 236",
            "actualPixels": 99120,
            "expectedSize": "618 x 348",
            "expectedPixels": 215064
          }
        ]
      }
    },
    "deprecations": {
      "id": "deprecations",
      "title": "Avoids deprecated APIs",
      "description": "Deprecated APIs will eventually be removed from the browser. [Learn more about deprecated APIs](https://developer.chrome.com/docs/lighthouse/best-practices/deprecations/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "value",
            "valueType": "text",
            "label": "Deprecation / Warning"
          },
          {
            "key": "source",
            "valueType": "source-location",
            "label": "Source"
          }
        ],
        "items": []
      }
    },
    "third-party-cookies": {
      "id": "third-party-cookies",
      "title": "Avoids third-party cookies",
      "description": "Third-party cookies may be blocked in some contexts. [Learn more about preparing for third-party cookie restrictions](https://privacysandbox.google.com/cookies/prepare/overview).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "name",
            "valueType": "text",
            "label": "Name"
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          }
        ],
        "items": []
      }
    },
    "mainthread-work-breakdown": {
      "id": "mainthread-work-breakdown",
      "title": "Minimize main-thread work",
      "description": "Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn how to minimize main-thread work](https://developer.chrome.com/docs/lighthouse/performance/mainthread-work-breakdown/)",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 5410.691999999973,
      "numericUnit": "millisecond",
      "displayValue": "5.4 s",
      "metricSavings": {
        "TBT": 750
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "groupLabel",
            "valueType": "text",
            "label": "Category"
          },
          {
            "key": "duration",
            "valueType": "ms",
            "granularity": 1,
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "group": "scriptEvaluation",
            "groupLabel": "Script Evaluation",
            "duration": 2413.5159999999787
          },
          {
            "group": "other",
            "groupLabel": "Other",
            "duration": 1435.3079999999932
          },
          {
            "group": "styleLayout",
            "groupLabel": "Style & Layout",
            "duration": 718.7239999999998
          },
          {
            "group": "scriptParseCompile",
            "groupLabel": "Script Parsing & Compilation",
            "duration": 347.732
          },
          {
            "group": "paintCompositeRender",
            "groupLabel": "Rendering",
            "duration": 232.99199999999993
          },
          {
            "group": "parseHTML",
            "groupLabel": "Parse HTML & CSS",
            "duration": 161.27200000000013
          },
          {
            "group": "garbageCollection",
            "groupLabel": "Garbage Collection",
            "duration": 101.1479999999999
          }
        ],
        "sortedBy": [
          "duration"
        ]
      },
      "guidanceLevel": 1
    },
    "bootup-time": {
      "id": "bootup-time",
      "title": "Reduce JavaScript execution time",
      "description": "Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. [Learn how to reduce Javascript execution time](https://developer.chrome.com/docs/lighthouse/performance/bootup-time/).",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 2411.503999999984,
      "numericUnit": "millisecond",
      "displayValue": "2.4 s",
      "metricSavings": {
        "TBT": 900
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "total",
            "granularity": 1,
            "valueType": "ms",
            "label": "Total CPU Time"
          },
          {
            "key": "scripting",
            "granularity": 1,
            "valueType": "ms",
            "label": "Script Evaluation"
          },
          {
            "key": "scriptParseCompile",
            "granularity": 1,
            "valueType": "ms",
            "label": "Script Parse"
          }
        ],
        "items": [
          {
            "url": "https://eu.desmoinesregister.com/",
            "total": 1083.5999999999997,
            "scripting": 222.412,
            "scriptParseCompile": 16.955999999999996
          },
          {
            "url": "Unattributable",
            "total": 956.6439999999986,
            "scripting": 77.50800000000002,
            "scriptParseCompile": 0
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "total": 931.8959999999968,
            "scripting": 565.3719999999967,
            "scriptParseCompile": 2.188
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "total": 811.015999999998,
            "scripting": 589.4919999999981,
            "scriptParseCompile": 3.048
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otTCF.js",
            "total": 662.4759999999897,
            "scripting": 592.0159999999896,
            "scriptParseCompile": 10.196
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otBannerSdk.js",
            "total": 313.10400000000004,
            "scripting": 111.76800000000001,
            "scriptParseCompile": 85.712
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/otSDKStub.js",
            "total": 91.37599999999978,
            "scripting": 70.99199999999983,
            "scriptParseCompile": 5.46
          },
          {
            "url": "https://atoms.desmoinesregister.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "total": 59.239999999999995,
            "scripting": 49.087999999999994,
            "scriptParseCompile": 9.296000000000001
          }
        ],
        "summary": {
          "wastedMs": 2411.503999999984
        },
        "sortedBy": [
          "total"
        ]
      },
      "guidanceLevel": 1
    },
    "diagnostics": {
      "id": "diagnostics",
      "title": "Diagnostics",
      "description": "Collection of useful page vitals.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "debugdata",
        "items": [
          {
            "numRequests": 166,
            "numScripts": 57,
            "numStylesheets": 1,
            "numFonts": 4,
            "numTasks": 2020,
            "numTasksOver10ms": 23,
            "numTasksOver25ms": 11,
            "numTasksOver50ms": 2,
            "numTasksOver100ms": 2,
            "numTasksOver500ms": 0,
            "rtt": 0.3650000000000002,
            "throughput": 20976544.759479813,
            "maxRtt": 12.585209999999995,
            "maxServerLatency": 384.88079,
            "totalByteWeight": 3039061,
            "totalTaskTime": 1352.6729999999989,
            "mainDocumentTransferSize": 37469
          }
        ]
      }
    },
    "network-requests": {
      "id": "network-requests",
      "title": "Network Requests",
      "description": "Lists the network requests that were made during page load.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "protocol",
            "valueType": "text",
            "label": "Protocol"
          },
          {
            "key": "networkRequestTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Network Request Time"
          },
          {
            "key": "networkEndTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Network End Time"
          },
          {
            "key": "transferSize",
            "valueType": "bytes",
            "displayUnit": "kb",
            "granularity": 1,
            "label": "Transfer Size"
          },
          {
            "key": "resourceSize",
            "valueType": "bytes",
            "displayUnit": "kb",
            "granularity": 1,
            "label": "Resource Size"
          },
          {
            "key": "statusCode",
            "valueType": "text",
            "label": "Status Code"
          },
          {
            "key": "mimeType",
            "valueType": "text",
            "label": "MIME Type"
          },
          {
            "key": "resourceType",
            "valueType": "text",
            "label": "Resource Type"
          }
        ],
        "items": [
          {
            "url": "https://desmoinesregister.com/",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 0,
            "networkRequestTime": 2.071000337600708,
            "networkEndTime": 42.02300024032593,
            "finished": true,
            "transferSize": 376,
            "resourceSize": 0,
            "statusCode": 301,
            "mimeType": "",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "desmoinesregister.com"
          },
          {
            "url": "https://www.desmoinesregister.com/",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 42.02300024032593,
            "networkRequestTime": 42.801000356674194,
            "networkEndTime": 65.95600008964539,
            "finished": true,
            "transferSize": 715,
            "resourceSize": 0,
            "statusCode": 302,
            "mimeType": "",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "desmoinesregister.com"
          },
          {
            "url": "https://eu.desmoinesregister.com/",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 65.95600008964539,
            "networkRequestTime": 66.6540002822876,
            "networkEndTime": 490.72700023651123,
            "finished": true,
            "transferSize": 37469,
            "resourceSize": 171583,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "Document",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "desmoinesregister.com"
          },
          {
            "url": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 512.6190001964569,
            "networkRequestTime": 514.9260001182556,
            "networkEndTime": 1284.3200001716614,
            "finished": true,
            "transferSize": 354,
            "resourceSize": 103,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "polyfill-fastly.io"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 514.1260001659393,
            "networkRequestTime": 515.7850000858307,
            "networkEndTime": 537.9170000553131,
            "finished": true,
            "transferSize": 4256,
            "resourceSize": 11823,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 514.4260003566742,
            "networkRequestTime": 516.462000131607,
            "networkEndTime": 541.8860003948212,
            "finished": true,
            "transferSize": 1109,
            "resourceSize": 938,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 514.5790002346039,
            "networkRequestTime": 516.8430001735687,
            "networkEndTime": 731.6590001583099,
            "finished": true,
            "transferSize": 83868,
            "resourceSize": 335587,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/11/13/PDEM/87257756007-norwalk-bucees-cs-4.jpg?crop=8639,4861,x0,y449&quality=50&width=420",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 514.8470001220703,
            "networkRequestTime": 517.1630001068115,
            "networkEndTime": 638.69500041008,
            "finished": true,
            "transferSize": 14000,
            "resourceSize": 13431,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Medium",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89736913007-screenshot-20260422-132701.png?crop=636,638,x0,y111&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 515.121000289917,
            "networkRequestTime": 517.7960000038147,
            "networkEndTime": 645.3070001602173,
            "finished": true,
            "transferSize": 147689,
            "resourceSize": 147361,
            "statusCode": 200,
            "mimeType": "image/png",
            "resourceType": "Image",
            "priority": "Medium",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/19/PIOC/89690040007-20260419-iowa-citypedestrianmallshooting-0005.jpg?crop=4000,3999,x600,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 515.4520001411438,
            "networkRequestTime": 641.5080003738403,
            "networkEndTime": 650.1730000972748,
            "finished": true,
            "transferSize": 9068,
            "resourceSize": 8798,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Medium",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/89719075007-property-tax-hearing-cs-40.jpg?crop=5760,5759,x432,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 515.7380001544952,
            "networkRequestTime": 646.9120001792908,
            "networkEndTime": 656.8440001010895,
            "finished": true,
            "transferSize": 8669,
            "resourceSize": 8441,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Medium",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/presto/2020/09/23/PDEM/6aeb5a9d-fd7d-4216-8c3d-cb451bdf8618-0923-Jail-001.jpg?crop=2000,2000,x750,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 515.9420001506805,
            "networkRequestTime": 652.0400002002716,
            "networkEndTime": 659.3610002994537,
            "finished": true,
            "transferSize": 8255,
            "resourceSize": 7741,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Medium",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/89718900007-img-0107.jpeg?crop=4283,4284,x0,y714&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 516.0520000457764,
            "networkRequestTime": 742.8380002975464,
            "networkEndTime": 840.1840002536774,
            "finished": true,
            "transferSize": 14035,
            "resourceSize": 13792,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/89718940007-roumel-head-shot.jpg?crop=2572,2574,x0,y65&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 516.1990003585815,
            "networkRequestTime": 841.6440000534058,
            "networkEndTime": 931.9630000591278,
            "finished": true,
            "transferSize": 8304,
            "resourceSize": 8084,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89738437007-screen-shot-1776887130755.jpg?crop=1079,1080,x0,y672&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 516.353000164032,
            "networkRequestTime": 933.4670000076294,
            "networkEndTime": 1031.2560000419617,
            "finished": true,
            "transferSize": 12759,
            "resourceSize": 12525,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/03/24/PDEM/89309061007-dmps-meeting.jpg?crop=1205,1205,x1122,y555&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 516.4730002880096,
            "networkRequestTime": 1033.259000301361,
            "networkEndTime": 1124.5300002098083,
            "finished": true,
            "transferSize": 9916,
            "resourceSize": 9690,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/11/05/PDEM/87097506007-annie-frisbie.jpg?crop=599,599,x0,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 516.594000339508,
            "networkRequestTime": 1126.0540001392365,
            "networkEndTime": 1220.480000257492,
            "finished": true,
            "transferSize": 9074,
            "resourceSize": 8616,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/05/09/PDEM/83543533007-eminent-domain-cs-016.jpg?crop=5761,5759,x1439,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 516.7080001831055,
            "networkRequestTime": 1222.134000301361,
            "networkEndTime": 1322.706000328064,
            "finished": true,
            "transferSize": 10193,
            "resourceSize": 9734,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89733819007-6-a-92-b-62-e-91-aa-4-e-7-c-80-c-49-cd-7-dc-94230-a.png?crop=282,283,x0,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 516.8380002975464,
            "networkRequestTime": 1286.1750001907349,
            "networkEndTime": 1381.53400015831,
            "finished": true,
            "transferSize": 80093,
            "resourceSize": 79792,
            "statusCode": 200,
            "mimeType": "image/png",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/-mm-/dac7d256a59f84940e502b66fdba9c9126e1eda5/c=300-0-1140-840/local/-/media/2017/04/16/DesMoines/B9327192121Z.1_20170416235011_000_GEHI321OF.1-0.jpg?quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 516.9750001430511,
            "networkRequestTime": 1293.217000246048,
            "networkEndTime": 1309.799000263214,
            "finished": true,
            "transferSize": 7847,
            "resourceSize": 7693,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/-mm-/a101bc7dcedf5dbcb73e5fd751878757ec594838/c=150-0-569-419/local/-/media/DesMoines/GenericImages/2013/11/06/1383749840000-handcuffs.jpg?quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 517.188000202179,
            "networkRequestTime": 1293.9340002536774,
            "networkEndTime": 1316.6310000419617,
            "finished": true,
            "transferSize": 7764,
            "resourceSize": 7619,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/02/26/NATR/88886339007-0218-coach-steyer-9.jpg?crop=1996,1995,x502,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 517.304000377655,
            "networkRequestTime": 1294.4770002365112,
            "networkEndTime": 1399.1330001354218,
            "finished": true,
            "transferSize": 9240,
            "resourceSize": 9019,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/08/19/PDEM/85724991007-081925-chows-gymnastics-ls-04.jpg?crop=4672,4671,x1752,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 517.404000043869,
            "networkRequestTime": 1294.9460000991821,
            "networkEndTime": 1317.364000082016,
            "finished": true,
            "transferSize": 9005,
            "resourceSize": 8756,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/09/26/PDEM/86367831007-harvest-4.jpg?crop=5222,5221,x1392,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 517.5510001182556,
            "networkRequestTime": 1295.4230000972748,
            "networkEndTime": 1391.645000219345,
            "finished": true,
            "transferSize": 9709,
            "resourceSize": 9540,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89734206007-caps-in-air.png?crop=2308,2308,x990,y0&quality=50&width=270",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 517.6730000972748,
            "networkRequestTime": 1295.9180002212524,
            "networkEndTime": 1396.167000055313,
            "finished": true,
            "transferSize": 91318,
            "resourceSize": 91048,
            "statusCode": 200,
            "mimeType": "image/png",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/appservices/universal-web/universal/icons/icon-instagram_24.png",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 517.797000169754,
            "networkRequestTime": 1296.3900001049042,
            "networkEndTime": 1307.5700001716614,
            "finished": true,
            "transferSize": 1760,
            "resourceSize": 1282,
            "statusCode": 200,
            "mimeType": "image/webp",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/otSDKStub.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 528.8010003566742,
            "networkRequestTime": 533.2480001449585,
            "networkEndTime": 558.0040001869202,
            "finished": true,
            "transferSize": 9317,
            "resourceSize": 26578,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "isLinkPreload": true,
            "experimentalFromMainFrame": true,
            "entity": "Optanon"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-loader.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 535.2480003833771,
            "networkRequestTime": 1296.9320003986359,
            "networkEndTime": 1304.7800002098083,
            "finished": true,
            "transferSize": 1735,
            "resourceSize": 3664,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cdn.cookielaw.org/consent/45e29b99-6e34-4a9d-ab94-5c6d56bfac9e/45e29b99-6e34-4a9d-ab94-5c6d56bfac9e.json",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 566.2030000686646,
            "networkRequestTime": 566.9680001735687,
            "networkEndTime": 597.0800004005432,
            "finished": true,
            "transferSize": 2971,
            "resourceSize": 7958,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "Optanon"
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otBannerSdk.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 601.8860001564026,
            "networkRequestTime": 1297.4900000095367,
            "networkEndTime": 1329.887000322342,
            "finished": true,
            "transferSize": 131455,
            "resourceSize": 541512,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "Optanon"
          },
          {
            "url": "https://www.gannett-cdn.com/gannett-web/properties/desmoinesregister/logos-and-branding/logo-compact.svg",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1297.7990000247955,
            "networkRequestTime": 1298.656000137329,
            "networkEndTime": 1312.1280002593994,
            "finished": true,
            "transferSize": 3171,
            "resourceSize": 9063,
            "statusCode": 200,
            "mimeType": "image/svg+xml",
            "resourceType": "Image",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1349.4030003547668,
            "networkRequestTime": 1350.15900015831,
            "networkEndTime": 1360.7250001430511,
            "finished": true,
            "transferSize": 17840,
            "resourceSize": 78891,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1349.7210001945496,
            "networkRequestTime": 1351.6550002098083,
            "networkEndTime": 1359.8940000534058,
            "finished": true,
            "transferSize": 5540,
            "resourceSize": 18995,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Rg.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1374.6800003051758,
            "networkRequestTime": 1411.5150001049042,
            "networkEndTime": 1421.6350002288818,
            "finished": true,
            "transferSize": 17212,
            "resourceSize": 16620,
            "statusCode": 200,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_SBd.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1375.1370000839233,
            "networkRequestTime": 1411.9440002441406,
            "networkEndTime": 1425.460000038147,
            "finished": true,
            "transferSize": 18066,
            "resourceSize": 17876,
            "statusCode": 200,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Bd.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1375.4260001182556,
            "networkRequestTime": 1412.2650003433228,
            "networkEndTime": 1422.4280002117157,
            "finished": true,
            "transferSize": 18151,
            "resourceSize": 17984,
            "statusCode": 200,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://api.gannett-cdn.com/thorium/popular/PDEM/10?apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz&searchtype=socialReferrals",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1448.2710001468658,
            "networkRequestTime": 1449.0780003070831,
            "networkEndTime": 1459.180999994278,
            "finished": true,
            "transferSize": 1338,
            "resourceSize": 3412,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://api.gannett-cdn.com/argon/navreimagined/pdem/top_nav_primary/?apiKey=f6YYPA1hPnB9Y9chky5GOmrZKmaguLVh",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1449.353000164032,
            "networkRequestTime": 1450.295000076294,
            "networkEndTime": 1461.5710000991821,
            "finished": true,
            "transferSize": 1823,
            "resourceSize": 7417,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://api.gannett-cdn.com/thorium/popular/PDEM/10?assettype=video&searchtype=pageViews&ssts=home&apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1464.962000131607,
            "networkRequestTime": 1465.7930002212524,
            "networkEndTime": 1471.1340000629425,
            "finished": true,
            "transferSize": 3034,
            "resourceSize": 16737,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://api.gannett-cdn.com/thorium/popular/PDEM/10?assettype=gallery&searchtype=pageViews&ssts=home&apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1465.7560000419617,
            "networkRequestTime": 1466.9180002212524,
            "networkEndTime": 1473.656000137329,
            "finished": true,
            "transferSize": 3368,
            "resourceSize": 17179,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://user.desmoinesregister.com/PDEM-GUP/user/",
            "sessionTargetType": "page",
            "protocol": "",
            "rendererStartTime": 1498.75,
            "networkRequestTime": 1498.75,
            "networkEndTime": 1573.587000131607,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 0,
            "statusCode": -1,
            "mimeType": "",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "desmoinesregister.com"
          },
          {
            "url": "https://api.gannett-cdn.com/thorium/breaking-news/?apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz&site-code=PDEM",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1500.8060002326965,
            "networkRequestTime": 1501.476000070572,
            "networkEndTime": 1593.5130002498627,
            "finished": true,
            "transferSize": 260,
            "resourceSize": 56,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://atoms.desmoinesregister.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1575.1460001468658,
            "networkRequestTime": 1576.3750002384186,
            "networkEndTime": 1600.3230001926422,
            "finished": true,
            "transferSize": 16443,
            "resourceSize": 58540,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "desmoinesregister.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/glide.core.min.css",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1601.5570001602173,
            "networkRequestTime": 1604.382000207901,
            "networkEndTime": 1609.6460003852844,
            "finished": true,
            "transferSize": 526,
            "resourceSize": 788,
            "statusCode": 200,
            "mimeType": "text/css",
            "resourceType": "Stylesheet",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1607.6470003128052,
            "networkRequestTime": 1635.0950000286102,
            "networkEndTime": 1658.1440000534058,
            "finished": true,
            "transferSize": 21268,
            "resourceSize": 20664,
            "statusCode": 200,
            "mimeType": "binary/octet-stream",
            "resourceType": "Font",
            "priority": "VeryHigh",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/05/09/PDEM/83543533007-eminent-domain-cs-016.jpg?crop=8639,4860,x0,y288&width=420&quality=50",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1625.3390002250671,
            "networkRequestTime": 1626.1170001029968,
            "networkEndTime": 1777.156000137329,
            "finished": true,
            "transferSize": 12261,
            "resourceSize": 12048,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/05/09/PDEM/83543533007-eminent-domain-cs-016.jpg?crop=8639,4860,x0,y288&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1625.969000339508,
            "networkRequestTime": 1626.683000087738,
            "networkEndTime": 1780.7750000953674,
            "finished": true,
            "transferSize": 10856,
            "resourceSize": 10696,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/89719864007-property-tax-hearing-cs-16.jpg?crop=7007,3943,x0,y364&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1626.3540000915527,
            "networkRequestTime": 1627.2130002975464,
            "networkEndTime": 1638.8730001449585,
            "finished": true,
            "transferSize": 10673,
            "resourceSize": 10126,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/89718974007-lets-make-cocktails-preview-page.jpg?crop=1329,748,x0,y96&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1626.7900002002716,
            "networkRequestTime": 1627.6540002822876,
            "networkEndTime": 1641.6510002613068,
            "finished": true,
            "transferSize": 18752,
            "resourceSize": 18504,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/89718939007-steak-vista-print.jpg?crop=3221,1812,x0,y1422&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1627.1890001296997,
            "networkRequestTime": 1628.0380001068115,
            "networkEndTime": 1665.3520002365112,
            "finished": true,
            "transferSize": 10497,
            "resourceSize": 9958,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89725429007-grand-blue-mile-cs-31.jpg?crop=7007,3943,x0,y364&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1627.5540001392365,
            "networkRequestTime": 1628.3700001239777,
            "networkEndTime": 1677.0790002346039,
            "finished": true,
            "transferSize": 13937,
            "resourceSize": 13661,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2024/08/28/PIOC/74979376007-20240828-u-icampus-0081.jpg?crop=5087,2862,x0,y0&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1627.9160001277924,
            "networkRequestTime": 1629.0410001277924,
            "networkEndTime": 1670.9480001926422,
            "finished": true,
            "transferSize": 10320,
            "resourceSize": 10137,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/videos/wochit/thumbnails/89663503007.jpg?width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1628.241000175476,
            "networkRequestTime": 1629.3930003643036,
            "networkEndTime": 1649.5150003433228,
            "finished": true,
            "transferSize": 10410,
            "resourceSize": 10298,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/02/11/NATR/88624838007-0211-is-uquarterbackcoach-keith-heckendorf-1.jpg?crop=2999,1687,x0,y441&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1628.5980002880096,
            "networkRequestTime": 1629.7640001773834,
            "networkEndTime": 1652.6530001163483,
            "finished": true,
            "transferSize": 5452,
            "resourceSize": 5339,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/02/11/NATR/88624848007-0211-is-uquarterbackcoach-keith-heckendorf-2.jpg?crop=2999,1688,x0,y323&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1628.9360003471375,
            "networkRequestTime": 1630.0910003185272,
            "networkEndTime": 1646.8890001773834,
            "finished": true,
            "transferSize": 4684,
            "resourceSize": 4557,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/11/29/PDEM/87526917007-usatsi-27702164.jpg?crop=4953,2787,x0,y184&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1629.2320001125336,
            "networkRequestTime": 1631.3700001239777,
            "networkEndTime": 1793.7430002689362,
            "finished": true,
            "transferSize": 1573365,
            "resourceSize": 1572370,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89725431007-grand-blue-mile-cs-32.jpg?crop=3306,1860,x0,y172&width=420&quality=50",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1655.6940002441406,
            "networkRequestTime": 1658.6019999980927,
            "networkEndTime": 1783.7760002613068,
            "finished": true,
            "transferSize": 15617,
            "resourceSize": 15093,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89725431007-grand-blue-mile-cs-32.jpg?crop=3306,1860,x0,y172&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1656.9920001029968,
            "networkRequestTime": 1659.3359999656677,
            "networkEndTime": 1794.840000152588,
            "finished": true,
            "transferSize": 13025,
            "resourceSize": 12916,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PIOC/89704404007-20260420-nexteraenergyduanearnoldtrainingcenter-0440.jpg?crop=4739,2666,x0,y0&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1657.616000175476,
            "networkRequestTime": 1659.6780002117157,
            "networkEndTime": 1740.9560000896454,
            "finished": true,
            "transferSize": 8794,
            "resourceSize": 8513,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PDEM/89703796007-pioneer-1.jpg?crop=8179,4602,x0,y817&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1658.0110001564026,
            "networkRequestTime": 1659.9930002689362,
            "networkEndTime": 1747.9880001544952,
            "finished": true,
            "transferSize": 15313,
            "resourceSize": 15096,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PDEM/89702813007-winner-flora-on-throne-smaller.jpg?crop=5797,3262,x0,y493&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1658.371000289917,
            "networkRequestTime": 1660.319000005722,
            "networkEndTime": 1728.898000240326,
            "finished": true,
            "transferSize": 12831,
            "resourceSize": 12601,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/15/PDEM/89632062007-100-market-street-unit-215-des-moines-roof-patio-photo-by-dynamic-motion.jpg?crop=3199,1800,x0,y165&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1658.9890003204346,
            "networkRequestTime": 1660.7930002212524,
            "networkEndTime": 1742.065000295639,
            "finished": true,
            "transferSize": 10411,
            "resourceSize": 10137,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/presto/2020/04/27/PDEM/04590922-d504-4fbc-87e8-fee9f069d2bf-pella9.jpg?crop=4386,2468,x0,y0&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1659.3990001678467,
            "networkRequestTime": 1661.2480001449585,
            "networkEndTime": 1742.7360002994537,
            "finished": true,
            "transferSize": 17182,
            "resourceSize": 17009,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/19/PDEM/89689790007-hooverroosevelt-2026-proms-55217335320-o.JPG?crop=3999,2251,x0,y208&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1660.092000246048,
            "networkRequestTime": 1661.6800003051758,
            "networkEndTime": 1730.4590001106262,
            "finished": true,
            "transferSize": 12996,
            "resourceSize": 12447,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/presto/2019/08/01/PDEM/476d38a2-1d6a-4769-8327-7d6ae306cd18-Photo_Jul_05_4_44_05_PM.jpg?crop=4031,2268,x0,y0&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1660.523000240326,
            "networkRequestTime": 1662.6310002803802,
            "networkEndTime": 1744.5700001716614,
            "finished": true,
            "transferSize": 16384,
            "resourceSize": 15921,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/19/PDEM/89685904007-waukee-prom-38.jpg?crop=8639,4861,x0,y449&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1661.005000114441,
            "networkRequestTime": 1663.5889999866486,
            "networkEndTime": 1751.3140001296997,
            "finished": true,
            "transferSize": 16241,
            "resourceSize": 15995,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/18/PDEM/89676701007-drake-road-races-cs-24.jpg?crop=7007,3943,x0,y364&width=384&quality=50&crop=16%3A9",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1661.388000011444,
            "networkRequestTime": 1664.2260003089905,
            "networkEndTime": 1731.8680000305176,
            "finished": true,
            "transferSize": 9535,
            "resourceSize": 9295,
            "statusCode": 200,
            "mimeType": "image/jpeg",
            "resourceType": "Image",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://atoms.desmoinesregister.com/atoms-configs/prod/dist/uw/PDEM/(null)/journey.json",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1707.991000175476,
            "networkRequestTime": 1725.494000196457,
            "networkEndTime": 1765.9680001735687,
            "finished": true,
            "transferSize": 291,
            "resourceSize": 0,
            "statusCode": 302,
            "mimeType": "application/xml",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "desmoinesregister.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1717.7340002059937,
            "networkRequestTime": 1726.465000152588,
            "networkEndTime": 1765.215000152588,
            "finished": true,
            "transferSize": 3843,
            "resourceSize": 10912,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cdn.cookielaw.org/consent/45e29b99-6e34-4a9d-ab94-5c6d56bfac9e/019c9ea5-4e14-78f7-b0c9-51d04d1fbc99/en.json",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1748.7530002593994,
            "networkRequestTime": 1750.156000137329,
            "networkEndTime": 1839.3170001506805,
            "finished": true,
            "transferSize": 41300,
            "resourceSize": 231467,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "Optanon"
          },
          {
            "url": "https://cdn.cookielaw.org/vendorlist/iab2V2Data.json",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1750.3390002250671,
            "networkRequestTime": 1752.9150002002716,
            "networkEndTime": 1840.757000207901,
            "finished": true,
            "transferSize": 88923,
            "resourceSize": 693738,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "Optanon"
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otTCF.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1751.7720000743866,
            "networkRequestTime": 1753.558000087738,
            "networkEndTime": 1805.5600001811981,
            "finished": true,
            "transferSize": 18164,
            "resourceSize": 64968,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "Optanon"
          },
          {
            "url": "https://atoms.desmoinesregister.com/atoms-configs/prod/dist/uw/pdem/control/journey.json?originalSegment=(null)",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1765.9680001735687,
            "networkRequestTime": 1790.4539999961853,
            "networkEndTime": 1814.3920001983643,
            "finished": true,
            "transferSize": 495,
            "resourceSize": 130,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "desmoinesregister.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/universal.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1779.880000114441,
            "networkRequestTime": 1786.1330001354218,
            "networkEndTime": 1817.6040000915527,
            "finished": true,
            "transferSize": 5871,
            "resourceSize": 25631,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/polymer.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1781.2070002555847,
            "networkRequestTime": 1787.8330001831055,
            "networkEndTime": 1811.5430002212524,
            "finished": true,
            "transferSize": 813,
            "resourceSize": 1403,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/legacy-element-mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1817.058000087738,
            "networkRequestTime": 1819.1830003261566,
            "networkEndTime": 1871.8460001945496,
            "finished": true,
            "transferSize": 9821,
            "resourceSize": 37955,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/polymer-fn.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1817.632000207901,
            "networkRequestTime": 1819.6350002288818,
            "networkEndTime": 1869.1490001678467,
            "finished": true,
            "transferSize": 1272,
            "resourceSize": 1536,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/templatizer-behavior.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1818.0290002822876,
            "networkRequestTime": 1820.0130002498627,
            "networkEndTime": 1857.773000240326,
            "finished": true,
            "transferSize": 2634,
            "resourceSize": 6013,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/dom-bind.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1818.41100025177,
            "networkRequestTime": 1820.355000257492,
            "networkEndTime": 1847.7930002212524,
            "finished": true,
            "transferSize": 2262,
            "resourceSize": 5635,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/dom-repeat.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1818.835000038147,
            "networkRequestTime": 1820.6750001907349,
            "networkEndTime": 1844.380000114441,
            "finished": true,
            "transferSize": 8551,
            "resourceSize": 26333,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/dom-if.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1819.1960000991821,
            "networkRequestTime": 1821.6770000457764,
            "networkEndTime": 1854.8080003261566,
            "finished": true,
            "transferSize": 4209,
            "resourceSize": 10725,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/array-selector.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1819.5880002975464,
            "networkRequestTime": 1821.9700002670288,
            "networkEndTime": 1866.268000125885,
            "finished": true,
            "transferSize": 4236,
            "resourceSize": 14055,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/custom-style.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1820.0010001659393,
            "networkRequestTime": 1822.297000169754,
            "networkEndTime": 1860.2250003814697,
            "finished": true,
            "transferSize": 2390,
            "resourceSize": 5518,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/mutable-data-behavior.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1820.3850002288818,
            "networkRequestTime": 1822.6210000514984,
            "networkEndTime": 1851.2540001869202,
            "finished": true,
            "transferSize": 2055,
            "resourceSize": 7229,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/html-tag.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1820.7360000610352,
            "networkRequestTime": 1827.1430003643036,
            "networkEndTime": 1862.6960003376007,
            "finished": true,
            "transferSize": 2036,
            "resourceSize": 5533,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/polymer-element.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1873.143000125885,
            "networkRequestTime": 1873.9190001487732,
            "networkEndTime": 1883.3210000991821,
            "finished": true,
            "transferSize": 949,
            "resourceSize": 1479,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/templatize.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1873.630000114441,
            "networkRequestTime": 1874.4570002555847,
            "networkEndTime": 1889.8880002498627,
            "finished": true,
            "transferSize": 8028,
            "resourceSize": 25151,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/debounce.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1874.0780003070831,
            "networkRequestTime": 1874.9230000972748,
            "networkEndTime": 1890.5510001182556,
            "finished": true,
            "transferSize": 1877,
            "resourceSize": 4464,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/flush.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1874.4470000267029,
            "networkRequestTime": 1875.3990001678467,
            "networkEndTime": 1892.8520002365112,
            "finished": true,
            "transferSize": 884,
            "resourceSize": 1543,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/mutable-data.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1874.922000169754,
            "networkRequestTime": 1875.78400015831,
            "networkEndTime": 1883.9630000591278,
            "finished": true,
            "transferSize": 3100,
            "resourceSize": 10630,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/boot.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1879.5110001564026,
            "networkRequestTime": 1894.2030000686646,
            "networkEndTime": 1906.826000213623,
            "finished": true,
            "transferSize": 1506,
            "resourceSize": 2576,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/property-effects.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1880.4520001411438,
            "networkRequestTime": 1894.7740001678467,
            "networkEndTime": 1927.835000038147,
            "finished": true,
            "transferSize": 25999,
            "resourceSize": 101693,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/gesture-event-listeners.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1881.2740001678467,
            "networkRequestTime": 1895.1920001506805,
            "networkEndTime": 1901.9010002613068,
            "finished": true,
            "transferSize": 1919,
            "resourceSize": 4946,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1890.2660002708435,
            "networkRequestTime": 1897.063000202179,
            "networkEndTime": 1914.623000383377,
            "finished": true,
            "transferSize": 488,
            "resourceSize": 567,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/style-gather.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1890.8410000801086,
            "networkRequestTime": 1897.3840000629425,
            "networkEndTime": 1921.4430003166199,
            "finished": true,
            "transferSize": 2727,
            "resourceSize": 9685,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1896.1530003547668,
            "networkRequestTime": 1922.2770001888275,
            "networkEndTime": 1938.03800034523,
            "finished": true,
            "transferSize": 1488,
            "resourceSize": 2293,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/array-splice.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1899.4730002880096,
            "networkRequestTime": 1922.8290002346039,
            "networkEndTime": 1964.1980001926422,
            "finished": true,
            "transferSize": 3172,
            "resourceSize": 8392,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/class.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1908.53600025177,
            "networkRequestTime": 1923.40900015831,
            "networkEndTime": 1939.6540002822876,
            "finished": true,
            "transferSize": 6324,
            "resourceSize": 19488,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1913.4530003070831,
            "networkRequestTime": 1923.8520002365112,
            "networkEndTime": 1943.1750001907349,
            "finished": true,
            "transferSize": 479,
            "resourceSize": 555,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/element-mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1914.545000076294,
            "networkRequestTime": 1924.4530000686646,
            "networkEndTime": 1947.170000076294,
            "finished": true,
            "transferSize": 9575,
            "resourceSize": 31453,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/dir-mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1915.2450001239777,
            "networkRequestTime": 1925.1400003433228,
            "networkEndTime": 1967.297000169754,
            "finished": true,
            "transferSize": 3066,
            "resourceSize": 7216,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/import-href.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1915.962000131607,
            "networkRequestTime": 1925.5790002346039,
            "networkEndTime": 1953.3440001010895,
            "finished": true,
            "transferSize": 1675,
            "resourceSize": 3414,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/render-status.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1916.5730001926422,
            "networkRequestTime": 1926.0830001831055,
            "networkEndTime": 1960.4360001087189,
            "finished": true,
            "transferSize": 1465,
            "resourceSize": 3543,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/unresolved.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1917.194000005722,
            "networkRequestTime": 1926.6760001182556,
            "networkEndTime": 1970.6700003147125,
            "finished": true,
            "transferSize": 658,
            "resourceSize": 867,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/legacy/polymer.dom.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1917.5840003490448,
            "networkRequestTime": 1927.031000137329,
            "networkEndTime": 1950.1090002059937,
            "finished": true,
            "transferSize": 4133,
            "resourceSize": 11727,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/async.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1931.2270002365112,
            "networkRequestTime": 1931.973000049591,
            "networkEndTime": 1978.7190001010895,
            "finished": true,
            "transferSize": 1901,
            "resourceSize": 6112,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/gestures.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1935.0550000667572,
            "networkRequestTime": 1956.791000366211,
            "networkEndTime": 1988.007000207901,
            "finished": true,
            "transferSize": 8364,
            "resourceSize": 27357,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/path.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1941.7420003414154,
            "networkRequestTime": 1957.5160002708435,
            "networkEndTime": 2002.138000011444,
            "finished": true,
            "transferSize": 2208,
            "resourceSize": 7567,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/case-map.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1942.2430000305176,
            "networkRequestTime": 1957.8940000534058,
            "networkEndTime": 1998.1200001239777,
            "finished": true,
            "transferSize": 1049,
            "resourceSize": 1820,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/property-accessors.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1943.0410001277924,
            "networkRequestTime": 1958.576000213623,
            "networkEndTime": 1993.66100025177,
            "finished": true,
            "transferSize": 4552,
            "resourceSize": 13445,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/template-stamp.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1943.938000202179,
            "networkRequestTime": 1959.031000137329,
            "networkEndTime": 2011.5400002002716,
            "finished": true,
            "transferSize": 6513,
            "resourceSize": 20406,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/resolve-url.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1950.8390002250671,
            "networkRequestTime": 1959.4980001449585,
            "networkEndTime": 1987.0220003128052,
            "finished": true,
            "transferSize": 1558,
            "resourceSize": 3096,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/settings.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1960.3389999866486,
            "networkRequestTime": 1975.3190002441406,
            "networkEndTime": 1999.2540001869202,
            "finished": true,
            "transferSize": 1987,
            "resourceSize": 4154,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/elements/dom-module.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1961.1910002231598,
            "networkRequestTime": 1975.8280003070831,
            "networkEndTime": 1990.797000169754,
            "finished": true,
            "transferSize": 2821,
            "resourceSize": 6682,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/properties-mixin.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1961.8980000019073,
            "networkRequestTime": 1976.2820000648499,
            "networkEndTime": 2005.9820003509521,
            "finished": true,
            "transferSize": 3348,
            "resourceSize": 10244,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/flattened-nodes-observer.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 1965.4970002174377,
            "networkRequestTime": 1976.7240002155304,
            "networkEndTime": 2008.6900000572205,
            "finished": true,
            "transferSize": 3260,
            "resourceSize": 10247,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/assets/otCenterRounded.json",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 2139.12900018692,
            "networkRequestTime": 2140.231000185013,
            "networkEndTime": 2151.983000278473,
            "finished": true,
            "transferSize": 3006,
            "resourceSize": 10557,
            "statusCode": 200,
            "mimeType": "application/json",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "Optanon"
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/assets/otCommonStyles.css",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 2140.220000267029,
            "networkRequestTime": 2141.0750002861023,
            "networkEndTime": 2155.2230002880096,
            "finished": true,
            "transferSize": 4820,
            "resourceSize": 27608,
            "statusCode": 200,
            "mimeType": "text/css",
            "resourceType": "Fetch",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "Optanon"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/properties-changed.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 2152.2960002422333,
            "networkRequestTime": 2156.4470002651215,
            "networkEndTime": 2163.5800001621246,
            "finished": true,
            "transferSize": 5715,
            "resourceSize": 21020,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/utils/telemetry.html",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 2158.9070003032684,
            "networkRequestTime": 2159.664000272751,
            "networkEndTime": 2166.179000377655,
            "finished": true,
            "transferSize": 1010,
            "resourceSize": 1781,
            "statusCode": 200,
            "mimeType": "text/html",
            "resourceType": "XHR",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "https://www.gannett-cdn.com/sites/desmoinesregister/images/favicon.png",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 2168.1600003242493,
            "networkRequestTime": 2171.1150000095367,
            "networkEndTime": 2180.6410002708435,
            "finished": true,
            "transferSize": 2013,
            "resourceSize": 1856,
            "statusCode": 200,
            "mimeType": "image/webp",
            "resourceType": "Other",
            "priority": "High",
            "experimentalFromMainFrame": true,
            "entity": "gannett-cdn.com"
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 2228.395000219345,
            "networkRequestTime": 2229.3520002365112,
            "networkEndTime": 2233.94300031662,
            "finished": true,
            "transferSize": 1894,
            "resourceSize": 3075,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20userPolymer%3Dwindow.Polyme…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2276.417000055313,
            "networkRequestTime": 2276.417000055313,
            "networkEndTime": 2276.8640003204346,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 2183,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20CSS_URL_RX%3D%2F(url%5C()(%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2279.6140003204346,
            "networkRequestTime": 2279.6140003204346,
            "networkEndTime": 2280.0130002498627,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 2672,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,function%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfo…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2282.483000278473,
            "networkRequestTime": 2282.483000278473,
            "networkEndTime": 2283.0080001354218,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 9256,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2286.1040003299713,
            "networkRequestTime": 2286.1040003299713,
            "networkEndTime": 2286.6200001239777,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5009,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,'use%20strict'%3Bvar%20siteColor%3Dwindow.ga_data.site.colors.si…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2290.2990000247955,
            "networkRequestTime": 2290.2990000247955,
            "networkEndTime": 2290.842000246048,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 361,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js",
            "sessionTargetType": "page",
            "protocol": "h2",
            "rendererStartTime": 2292.867000102997,
            "networkRequestTime": 2298.8240003585815,
            "networkEndTime": 2303.648000240326,
            "finished": true,
            "transferSize": 4465,
            "resourceSize": 10617,
            "statusCode": 200,
            "mimeType": "application/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true,
            "entity": "gannettdigital.com"
          },
          {
            "url": "data:text/javascript;charset=utf-8,%2F**%20%40suppress%20%7Bdeprecated%7D%20*%2F(function()%7B'use%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2314.313000202179,
            "networkRequestTime": 2314.313000202179,
            "networkEndTime": 2314.7110002040863,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 3665,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20unique%20global%20id%20f…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2316.621000289917,
            "networkRequestTime": 2316.621000289917,
            "networkEndTime": 2316.9390001296997,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1863,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2318.2620000839233,
            "networkRequestTime": 2318.2620000839233,
            "networkEndTime": 2318.69300031662,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 6199,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Module%20wit…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2321.022000312805,
            "networkRequestTime": 2321.022000312805,
            "networkEndTime": 2321.50400018692,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 7136,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20caseMap%3D%7B%7D%3Bvar%20DA…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2323.616000175476,
            "networkRequestTime": 2323.616000175476,
            "networkEndTime": 2323.850000143051,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1394,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20Microtask%20implemented%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2325.048000097275,
            "networkRequestTime": 2325.048000097275,
            "networkEndTime": 2325.4610002040863,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5682,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26type…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2327.9860002994537,
            "networkRequestTime": 2327.9860002994537,
            "networkEndTime": 2328.9450001716614,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 20501,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26type…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2333.4430000782013,
            "networkRequestTime": 2333.4430000782013,
            "networkEndTime": 2333.9620003700256,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 12872,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2337.944000005722,
            "networkRequestTime": 2337.944000005722,
            "networkEndTime": 2338.608000278473,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 19930,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2344.594000339508,
            "networkRequestTime": 2344.594000339508,
            "networkEndTime": 2347.6820001602173,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 100964,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Provides%20b…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2361.944000005722,
            "networkRequestTime": 2361.944000005722,
            "networkEndTime": 2362.246999979019,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1356,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2364.7690002918243,
            "networkRequestTime": 2364.7690002918243,
            "networkEndTime": 2365.2320001125336,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 9658,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2368.709000110626,
            "networkRequestTime": 2368.709000110626,
            "networkEndTime": 2369.7580001354218,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 30666,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2374.076000213623,
            "networkRequestTime": 2374.076000213623,
            "networkEndTime": 2374.3860001564026,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 3961,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20detect%20native%20touch%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2376.850000143051,
            "networkRequestTime": 2376.850000143051,
            "networkEndTime": 2377.8040001392365,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 26851,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2383.3310000896454,
            "networkRequestTime": 2383.3310000896454,
            "networkEndTime": 2383.656000137329,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 4429,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2385.8760001659393,
            "networkRequestTime": 2385.8760001659393,
            "networkEndTime": 2386.2210001945496,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 6777,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20run%20a%20callback%20whe…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2388.1150000095367,
            "networkRequestTime": 2388.1150000095367,
            "networkEndTime": 2388.3750002384186,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 2990,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20scheduled%3Dfalse%3Bvar%20b…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2389.7230002880096,
            "networkRequestTime": 2389.7230002880096,
            "networkEndTime": 2390.033000230789,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 3121,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20unresolved%0Afunction%20…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2391.5170001983643,
            "networkRequestTime": 2391.5170001983643,
            "networkEndTime": 2391.773000240326,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 480,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bfunction%20newSplice(index%2Cremo…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2393.03600025177,
            "networkRequestTime": 2393.03600025177,
            "networkEndTime": 2393.520000219345,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 7970,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2395.600000143051,
            "networkRequestTime": 2395.600000143051,
            "networkEndTime": 2396.146000146866,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 9727,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20debouncerQueue%3D%5B%5D%3B%…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2398.632000207901,
            "networkRequestTime": 2398.632000207901,
            "networkEndTime": 2398.903000354767,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1114,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2400.2890000343323,
            "networkRequestTime": 2400.2890000343323,
            "networkEndTime": 2400.856000185013,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 11133,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2404.927000284195,
            "networkRequestTime": 2404.927000284195,
            "networkEndTime": 2406.231000185013,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 37092,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2412.686000108719,
            "networkRequestTime": 2412.686000108719,
            "networkEndTime": 2413.459000349045,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 19044,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20Legacy…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2417.5540001392365,
            "networkRequestTime": 2417.5540001392365,
            "networkEndTime": 2417.837000131607,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 1111,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2419.482000350952,
            "networkRequestTime": 2419.482000350952,
            "networkEndTime": 2419.942000389099,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 10198,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2423.6960003376007,
            "networkRequestTime": 2423.6960003376007,
            "networkEndTime": 2424.5800001621246,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 24612,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPoly…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2431.2510001659393,
            "networkRequestTime": 2431.2510001659393,
            "networkEndTime": 2431.7360002994537,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5584,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2434.5380001068115,
            "networkRequestTime": 2434.5380001068115,
            "networkEndTime": 2434.954000234604,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5022,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2439.2210001945496,
            "networkRequestTime": 2439.2210001945496,
            "networkEndTime": 2439.6670002937317,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 5107,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Base%20class…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2442.271000146866,
            "networkRequestTime": 2442.271000146866,
            "networkEndTime": 2442.5350003242493,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 939,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(o…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2445.531000137329,
            "networkRequestTime": 2445.531000137329,
            "networkEndTime": 2446.5490000247955,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 25690,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(o…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2452.903000354767,
            "networkRequestTime": 2452.903000354767,
            "networkEndTime": 2453.4400000572205,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 10133,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(ta…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2458.8540000915527,
            "networkRequestTime": 2458.8540000915527,
            "networkEndTime": 2459.475000143051,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 13519,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20mutablePropertyChange%3Dvoi…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2463.020000219345,
            "networkRequestTime": 2463.020000219345,
            "networkEndTime": 2463.917000055313,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 6798,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          },
          {
            "url": "data:text/javascript;charset=utf-8,%2F%2F%20bc%0APolymer.Base%3DPolymer.LegacyElementMixin(HTMLElem…",
            "sessionTargetType": "page",
            "protocol": "data",
            "rendererStartTime": 2465.7110002040863,
            "networkRequestTime": 2465.7110002040863,
            "networkEndTime": 2465.9210002422333,
            "finished": true,
            "transferSize": 0,
            "resourceSize": 314,
            "statusCode": 200,
            "mimeType": "text/javascript",
            "resourceType": "Script",
            "priority": "Low",
            "experimentalFromMainFrame": true
          }
        ],
        "debugData": {
          "type": "debugdata",
          "networkStartTimeTs": 1574333461245.9998,
          "initiators": [
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 220,
              "columnNumber": 214
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 220,
              "columnNumber": 356
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 220,
              "columnNumber": 775
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 220,
              "columnNumber": 1224
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 522,
              "columnNumber": 739
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 524,
              "columnNumber": 1366
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 526,
              "columnNumber": 1513
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 528,
              "columnNumber": 1382
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 530,
              "columnNumber": 1307
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 532,
              "columnNumber": 1244
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 534,
              "columnNumber": 1295
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 536,
              "columnNumber": 1369
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 538,
              "columnNumber": 1301
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 540,
              "columnNumber": 1291
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 542,
              "columnNumber": 1333
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 544,
              "columnNumber": 1504
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 546,
              "columnNumber": 1657
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 548,
              "columnNumber": 1565
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 550,
              "columnNumber": 1316
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 552,
              "columnNumber": 1405
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 554,
              "columnNumber": 1249
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 556,
              "columnNumber": 1263
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 560,
              "columnNumber": 283
            },
            {
              "type": "script",
              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
              "lineNumber": 0,
              "columnNumber": 22
            },
            {
              "type": "script",
              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
              "lineNumber": 1,
              "columnNumber": 20
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            },
            {
              "type": "parser",
              "url": "https://eu.desmoinesregister.com/",
              "lineNumber": 600,
              "columnNumber": 655
            }
          ]
        }
      }
    },
    "network-rtt": {
      "id": "network-rtt",
      "title": "Network Round Trip Times",
      "description": "Network round trip times (RTT) have a large impact on performance. If the RTT to an origin is high, it's an indication that servers closer to the user could improve performance. [Learn more about the Round Trip Time](https://hpbn.co/primer-on-latency-and-bandwidth/).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "numericValue": 12.585209999999995,
      "numericUnit": "millisecond",
      "displayValue": "10 ms",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "origin",
            "valueType": "text",
            "label": "URL"
          },
          {
            "key": "rtt",
            "valueType": "ms",
            "granularity": 1,
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "origin": "https://eu.desmoinesregister.com",
            "rtt": 12.585209999999995
          },
          {
            "origin": "https://desmoinesregister.com",
            "rtt": 7.398999999999999
          },
          {
            "origin": "https://www.gannett-cdn.com",
            "rtt": 2.44
          },
          {
            "origin": "https://cdn.cookielaw.org",
            "rtt": 0.9390000000000001
          },
          {
            "origin": "https://api.gannett-cdn.com",
            "rtt": 0.8999999999999999
          },
          {
            "origin": "https://atoms.desmoinesregister.com",
            "rtt": 0.8999999999999999
          },
          {
            "origin": "https://polyfill-fastly.io",
            "rtt": 0.8739999999999997
          },
          {
            "origin": "https://www.desmoinesregister.com",
            "rtt": 0.7800000000000011
          },
          {
            "origin": "https://cpt-static.gannettdigital.com",
            "rtt": 0.3650000000000002
          }
        ],
        "sortedBy": [
          "rtt"
        ]
      }
    },
    "network-server-latency": {
      "id": "network-server-latency",
      "title": "Server Backend Latencies",
      "description": "Server latencies can impact web performance. If the server latency of an origin is high, it's an indication the server is overloaded or has poor backend performance. [Learn more about server response time](https://hpbn.co/primer-on-web-performance/#analyzing-the-resource-waterfall).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "numericValue": 384.88079,
      "numericUnit": "millisecond",
      "displayValue": "380 ms",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "origin",
            "valueType": "text",
            "label": "URL"
          },
          {
            "key": "serverResponseTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Time Spent"
          }
        ],
        "items": [
          {
            "origin": "https://eu.desmoinesregister.com",
            "serverResponseTime": 384.88079
          },
          {
            "origin": "https://www.gannett-cdn.com",
            "serverResponseTime": 39.297
          },
          {
            "origin": "https://cdn.cookielaw.org",
            "serverResponseTime": 14.108
          },
          {
            "origin": "https://cpt-static.gannettdigital.com",
            "serverResponseTime": 9.276
          },
          {
            "origin": "https://polyfill-fastly.io",
            "serverResponseTime": 3.8229999999999995
          },
          {
            "origin": "https://api.gannett-cdn.com",
            "serverResponseTime": 3.618
          },
          {
            "origin": "https://desmoinesregister.com",
            "serverResponseTime": 3.2330000000000023
          },
          {
            "origin": "https://atoms.desmoinesregister.com",
            "serverResponseTime": 2.909999999999999
          },
          {
            "origin": "https://www.desmoinesregister.com",
            "serverResponseTime": 1.3709999999999987
          }
        ],
        "sortedBy": [
          "serverResponseTime"
        ]
      }
    },
    "main-thread-tasks": {
      "id": "main-thread-tasks",
      "title": "Tasks",
      "description": "Lists the toplevel main thread tasks that executed during page load.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "startTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Start Time"
          },
          {
            "key": "duration",
            "valueType": "ms",
            "granularity": 1,
            "label": "End Time"
          }
        ],
        "items": [
          {
            "duration": 25.189,
            "startTime": 496.261
          },
          {
            "duration": 15.867,
            "startTime": 522.527
          },
          {
            "duration": 5.318,
            "startTime": 563.919
          },
          {
            "duration": 5.737,
            "startTime": 599.523
          },
          {
            "duration": 11.784,
            "startTime": 1289.176
          },
          {
            "duration": 14.29,
            "startTime": 1300.988
          },
          {
            "duration": 5.091,
            "startTime": 1318.034
          },
          {
            "duration": 24.267,
            "startTime": 1326.493
          },
          {
            "duration": 14.918,
            "startTime": 1352.611
          },
          {
            "duration": 5.691,
            "startTime": 1367.61
          },
          {
            "duration": 38.236,
            "startTime": 1374.338
          },
          {
            "duration": 6.934,
            "startTime": 1423.337
          },
          {
            "duration": 121.809,
            "startTime": 1441.733
          },
          {
            "duration": 7.115,
            "startTime": 1563.581
          },
          {
            "duration": 45.483,
            "startTime": 1587.036
          },
          {
            "duration": 30.753,
            "startTime": 1633.744
          },
          {
            "duration": 15.494,
            "startTime": 1671.264
          },
          {
            "duration": 14.878,
            "startTime": 1697.058
          },
          {
            "duration": 5.026,
            "startTime": 1713.565
          },
          {
            "duration": 34.134,
            "startTime": 1722.135
          },
          {
            "duration": 8.565,
            "startTime": 1769.563
          },
          {
            "duration": 5.717,
            "startTime": 1779.787
          },
          {
            "duration": 12.936,
            "startTime": 1789.462
          },
          {
            "duration": 8.102,
            "startTime": 1816.577
          },
          {
            "duration": 9.658,
            "startTime": 1833.579
          },
          {
            "duration": 19.465,
            "startTime": 1853.279
          },
          {
            "duration": 6.457,
            "startTime": 1872.768
          },
          {
            "duration": 5.516,
            "startTime": 1879.389
          },
          {
            "duration": 9.674,
            "startTime": 1896.629
          },
          {
            "duration": 5.456,
            "startTime": 1906.709
          },
          {
            "duration": 9.771,
            "startTime": 1912.404
          },
          {
            "duration": 9.738,
            "startTime": 1939.564
          },
          {
            "duration": 5.409,
            "startTime": 1960.388
          },
          {
            "duration": 165.481,
            "startTime": 1978.34
          },
          {
            "duration": 42.887,
            "startTime": 2170.912
          },
          {
            "duration": 9.611,
            "startTime": 2213.818
          },
          {
            "duration": 5.629,
            "startTime": 2226.14
          },
          {
            "duration": 39.945,
            "startTime": 2233.494
          },
          {
            "duration": 11.063,
            "startTime": 2297.343
          },
          {
            "duration": 5.012,
            "startTime": 2309.125
          },
          {
            "duration": 11.307,
            "startTime": 2341.771
          },
          {
            "duration": 12.663,
            "startTime": 2353.148
          },
          {
            "duration": 5.528,
            "startTime": 2381.141
          },
          {
            "duration": 6.069,
            "startTime": 2404.182
          },
          {
            "duration": 6.494,
            "startTime": 2410.349
          },
          {
            "duration": 5.248,
            "startTime": 2423.107
          },
          {
            "duration": 6.959,
            "startTime": 2428.502
          },
          {
            "duration": 6.901,
            "startTime": 2450.245
          },
          {
            "duration": 5.328,
            "startTime": 2457.224
          },
          {
            "duration": 27.09,
            "startTime": 2468.8
          },
          {
            "duration": 33.305,
            "startTime": 2495.918
          }
        ]
      }
    },
    "metrics": {
      "id": "metrics",
      "title": "Metrics",
      "description": "Collects all available metrics.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "numericValue": 10162,
      "numericUnit": "millisecond",
      "details": {
        "type": "debugdata",
        "items": [
          {
            "firstContentfulPaint": 4321,
            "largestContentfulPaint": 6470,
            "interactive": 10162,
            "speedIndex": 5198,
            "totalBlockingTime": 764,
            "maxPotentialFID": 662,
            "cumulativeLayoutShift": 0.656139,
            "cumulativeLayoutShiftMainFrame": 0.656139,
            "lcpLoadDelay": 2311,
            "lcpLoadDuration": 2852,
            "timeToFirstByte": 985,
            "observedTimeOrigin": 0,
            "observedTimeOriginTs": 1574333458804,
            "observedNavigationStart": 0,
            "observedNavigationStartTs": 1574333458804,
            "observedFirstPaint": 1336,
            "observedFirstPaintTs": 1574334794754,
            "observedFirstContentfulPaint": 1336,
            "observedFirstContentfulPaintTs": 1574334794754,
            "observedFirstContentfulPaintAllFrames": 1336,
            "observedFirstContentfulPaintAllFramesTs": 1574334794754,
            "observedLargestContentfulPaint": 1455,
            "observedLargestContentfulPaintTs": 1574334913372,
            "observedLargestContentfulPaintAllFrames": 1455,
            "observedLargestContentfulPaintAllFramesTs": 1574334913372,
            "observedTraceEnd": 4560,
            "observedTraceEndTs": 1574338018949,
            "observedLoad": 2146,
            "observedLoadTs": 1574335604492,
            "observedDomContentLoaded": 1560,
            "observedDomContentLoadedTs": 1574335019263,
            "observedCumulativeLayoutShift": 0.656139,
            "observedCumulativeLayoutShiftMainFrame": 0.656139,
            "observedFirstVisualChange": 1338,
            "observedFirstVisualChangeTs": 1574334796804,
            "observedLastVisualChange": 3224,
            "observedLastVisualChangeTs": 1574336682804,
            "observedSpeedIndex": 2059,
            "observedSpeedIndexTs": 1574335517594
          },
          {
            "lcpInvalidated": false
          }
        ]
      }
    },
    "resource-summary": {
      "id": "resource-summary",
      "title": "Resources Summary",
      "description": "Aggregates all network requests and groups them by type",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "label",
            "valueType": "text",
            "label": "Resource Type"
          },
          {
            "key": "requestCount",
            "valueType": "numeric",
            "label": "Requests"
          },
          {
            "key": "transferSize",
            "valueType": "bytes",
            "label": "Transfer Size"
          }
        ],
        "items": [
          {
            "resourceType": "total",
            "label": "Total",
            "requestCount": 123,
            "transferSize": 3039061
          },
          {
            "resourceType": "image",
            "label": "Image",
            "requestCount": 42,
            "transferSize": 2301405
          },
          {
            "resourceType": "other",
            "label": "Other",
            "requestCount": 61,
            "transferSize": 324681
          },
          {
            "resourceType": "script",
            "label": "Script",
            "requestCount": 14,
            "transferSize": 300283
          },
          {
            "resourceType": "font",
            "label": "Font",
            "requestCount": 4,
            "transferSize": 74697
          },
          {
            "resourceType": "document",
            "label": "Document",
            "requestCount": 1,
            "transferSize": 37469
          },
          {
            "resourceType": "stylesheet",
            "label": "Stylesheet",
            "requestCount": 1,
            "transferSize": 526
          },
          {
            "resourceType": "media",
            "label": "Media",
            "requestCount": 0,
            "transferSize": 0
          },
          {
            "resourceType": "third-party",
            "label": "Third-party",
            "requestCount": 116,
            "transferSize": 2983272
          }
        ]
      }
    },
    "layout-shifts": {
      "id": "layout-shifts",
      "title": "Avoid large layout shifts",
      "description": "These are the largest layout shifts observed on the page. Each table item represents a single layout shift, and shows the element that shifted the most. Below each item are possible root causes that led to the layout shift. Some of these layout shifts may not be included in the CLS metric value due to [windowing](https://web.dev/articles/cls#what_is_cls). [Learn how to improve CLS](https://web.dev/articles/optimize-cls)",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "displayValue": "3 layout shifts found",
      "metricSavings": {
        "CLS": 0.656
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "extra"
            },
            "label": "Element"
          },
          {
            "key": "score",
            "valueType": "numeric",
            "subItemsHeading": {
              "key": "cause",
              "valueType": "text"
            },
            "granularity": 0.001,
            "label": "Layout shift score"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "page-7-A",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,3,A",
              "selector": "div.content-well > div#content > div#section-stories > a.section-helper-flex",
              "boundingRect": {
                "top": 377,
                "bottom": 482,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 105
              },
              "snippet": "<a class=\"section-helper-flex section-helper-row ten-column spacer-small p1-container\" href=\"/story/news/local/des-moines/2026/04/22/window-washer-falls-downtown-des-m…\" data-module-name=\"promo-story-thumb-small\" data-index=\"2\" onclick=\"firePromoAnalytics(event)\">",
              "nodeLabel": "Window washer falls three stories from downtown Des Moines building\nDes Moines "
            },
            "score": 0.336323,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "extra": {
                    "type": "node",
                    "lhId": "page-5-IMG",
                    "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,A,0,DIV,0,PICTURE,3,IMG",
                    "selector": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo",
                    "boundingRect": {
                      "top": 56,
                      "bottom": 288,
                      "left": 0,
                      "right": 412,
                      "width": 412,
                      "height": 232
                    },
                    "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/11/13/PDEM/872…\" alt=\"\" class=\"p2-photo\">",
                    "nodeLabel": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo"
                  },
                  "cause": "Media element lacking an explicit size"
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-7-A",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,3,A",
              "selector": "div.content-well > div#content > div#section-stories > a.section-helper-flex",
              "boundingRect": {
                "top": 377,
                "bottom": 482,
                "left": 34,
                "right": 378,
                "width": 343,
                "height": 105
              },
              "snippet": "<a class=\"section-helper-flex section-helper-row ten-column spacer-small p1-container\" href=\"/story/news/local/des-moines/2026/04/22/window-washer-falls-downtown-des-m…\" data-module-name=\"promo-story-thumb-small\" data-index=\"2\" onclick=\"firePromoAnalytics(event)\">",
              "nodeLabel": "Window washer falls three stories from downtown Des Moines building\nDes Moines "
            },
            "score": 0.318659
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-6-DIV",
              "path": "1,HTML,1,BODY,2,UTIL-STICKY-MODULE,2,DIV,1,DIV,0,DIV,1,DIV",
              "selector": "div#navWrapContainer > div#navContainer > div#navRibbon > div#itemWrapper",
              "boundingRect": {
                "top": 0,
                "bottom": 55,
                "left": 167,
                "right": 412,
                "width": 245,
                "height": 55
              },
              "snippet": "<div id=\"itemWrapper\">",
              "nodeLabel": "div#navWrapContainer > div#navContainer > div#navRibbon > div#itemWrapper"
            },
            "score": 0.001157,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "extra": {
                    "type": "node",
                    "lhId": "page-5-IMG",
                    "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,A,0,DIV,0,PICTURE,3,IMG",
                    "selector": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo",
                    "boundingRect": {
                      "top": 56,
                      "bottom": 288,
                      "left": 0,
                      "right": 412,
                      "width": 412,
                      "height": 232
                    },
                    "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/11/13/PDEM/872…\" alt=\"\" class=\"p2-photo\">",
                    "nodeLabel": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo"
                  },
                  "cause": "Media element lacking an explicit size"
                }
              ]
            }
          }
        ]
      },
      "guidanceLevel": 2
    },
    "long-tasks": {
      "id": "long-tasks",
      "title": "Avoid long main-thread tasks",
      "description": "Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. [Learn how to avoid long main-thread tasks](https://web.dev/articles/optimize-long-tasks)",
      "score": 1,
      "scoreDisplayMode": "informative",
      "displayValue": "17 long tasks found",
      "metricSavings": {
        "TBT": 750
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "startTime",
            "valueType": "ms",
            "granularity": 1,
            "label": "Start Time"
          },
          {
            "key": "duration",
            "valueType": "ms",
            "granularity": 1,
            "label": "Duration"
          }
        ],
        "items": [
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otTCF.js",
            "duration": 662,
            "startTime": 9070.058629999998
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "duration": 243.9999999999991,
            "startTime": 6319.988629999998
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otBannerSdk.js",
            "duration": 137,
            "startTime": 6072.152629999999
          },
          {
            "url": "data:text/javascript;charset=utf-8,%2F%2F%20bc%0APolymer.Base%3DPolymer.LegacyElementMixin(HTMLElement).prototype%3B%2F%2F%20NOTE%3A%20this%20is%20here%20for%20modulizer%20to%20export%20%60html%60%20for%20the%20module%20version%20of%20this%20file%0APolymer.html%3DPolymer.html%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Fpolymer.html.js%0A",
            "duration": 108,
            "startTime": 10842.258246088864
          },
          {
            "url": "Unattributable",
            "duration": 101,
            "startTime": 2860.712629999999
          },
          {
            "url": "https://eu.desmoinesregister.com/",
            "duration": 97,
            "startTime": 3053.712629999999
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "duration": 91,
            "startTime": 5269.988629999999
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otBannerSdk.js",
            "duration": 86,
            "startTime": 7092.988629999997
          },
          {
            "url": "https://eu.desmoinesregister.com/",
            "duration": 80,
            "startTime": 3226.712629999999
          },
          {
            "url": "Unattributable",
            "duration": 78,
            "startTime": 891.3349999999998
          },
          {
            "url": "https://eu.desmoinesregister.com/",
            "duration": 76,
            "startTime": 3150.712629999999
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "duration": 67,
            "startTime": 10617.573629999997
          },
          {
            "url": "https://eu.desmoinesregister.com/",
            "duration": 63,
            "startTime": 2961.712629999999
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "duration": 62,
            "startTime": 5360.988629999999
          },
          {
            "url": "Unattributable",
            "duration": 60,
            "startTime": 774.3349999999998
          },
          {
            "url": "https://atoms.desmoinesregister.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "duration": 60,
            "startTime": 7375.573629999997
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7BObject%7D%20*%2Fvar%20CaseMap%3DPolymer.CaseMap%3B%2F%2F%20Monotonically%20increasing%20unique%20ID%20used%20for%20de-duping%20effects%20triggered%0A%2F%2F%20from%20multiple%20properties%20in%20the%20same%20turn%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20Property%20effect%20types%3B%20effects%20are%20stored%20on%20the%20prototype%20using%20these%20keys%0A%20%20%20*%20%40enum%20%7Bstring%7D%0A%20%20%20*%2Fvar%20TYPES%3D%7BCOMPUTE%3A'__computeEffects'%2CREFLECT%3A'__reflectEffects'%2CNOTIFY%3A'__notifyEffects'%2CPROPAGATE%3A'__propagateEffects'%2COBSERVE%3A'__observeEffects'%2CREAD_ONLY%3A'__readOnly'%7D%3B%2F**%20%40const%20%7BRegExp%7D%20*%2Fvar%20capitalAttributeRegex%3D%2F%5BA-Z%5D%2F%3B%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20name%3A%20(string%20%7C%20undefined)%2C%0A%20%20%20*%20structured%3A%20(boolean%20%7C%20undefined)%2C%0A%20%20%20*%20wildcard%3A%20(boolean%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataTrigger%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20info%3A%20%3F%2C%0A%20%20%20*%20trigger%3A%20(!DataTrigger%20%7C%20undefined)%2C%0A%20%20%20*%20fn%3A%20(!Function%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataEffect%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0Avar%20PropertyEffectsType%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Ensures%20that%20the%20model%20has%20an%20own-property%20map%20of%20effects%20for%20the%20given%20type.%0A%20%20%20*%20The%20model%20may%20be%20a%20prototype%20or%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20Property%20effects%20are%20stored%20as%20arrays%20of%20effects%20by%20property%20in%20a%20map%2C%0A%20%20%20*%20by%20named%20type%20on%20the%20model.%20e.g.%0A%20%20%20*%0A%20%20%20*%20%20%20__computeEffects%3A%20%7B%0A%20%20%20*%20%20%20%20%20foo%3A%20%5B%20...%20%5D%2C%0A%20%20%20*%20%20%20%20%20bar%3A%20%5B%20...%20%5D%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20If%20the%20model%20does%20not%20yet%20have%20an%20effect%20map%20for%20the%20type%2C%20one%20is%20created%0A%20%20%20*%20and%20returned.%20%20If%20it%20does%2C%20but%20it%20is%20not%20an%20own%20property%20(i.e.%20the%0A%20%20%20*%20prototype%20had%20effects)%2C%20the%20the%20map%20is%20deeply%20cloned%20and%20the%20copy%20is%0A%20%20%20*%20set%20on%20the%20model%20and%20returned%2C%20ready%20for%20new%20effects%20to%20be%20added.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Property%20effect%20type%0A%20%20%20*%20%40return%20%7BObject%7D%20The%20own-property%20map%20of%20effects%20for%20the%20given%20type%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20ensureOwnEffectMap(model%2Ctype)%7Bvar%20effects%3Dmodel%5Btype%5D%3Bif(!effects)%7Beffects%3Dmodel%5Btype%5D%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(type))%7Beffects%3Dmodel%5Btype%5D%3DObject.create(model%5Btype%5D)%3Bfor(var%20p%20in%20effects)%7Bvar%20protoFx%3Deffects%5Bp%5D%3Bvar%20instFx%3Deffects%5Bp%5D%3DArray(protoFx.length)%3Bfor(var%20i%3D0%3Bi%3CprotoFx.length%3Bi%2B%2B)%7BinstFx%5Bi%5D%3DprotoFx%5Bi%5D%3B%7D%7D%7Dreturn%20effects%3B%7D%2F%2F%20--%20effects%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Runs%20all%20effects%20of%20a%20given%20type%20for%20the%20given%20set%20of%20property%20changes%0A%20%20%20*%20on%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffects(inst%2Ceffects%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bif(effects)%7Bvar%20ran%3Dfalse%3Bvar%20id%3DdedupeId%2B%2B%3Bfor(var%20prop%20in%20props)%7Bif(runEffectsForProperty(inst%2Ceffects%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs))%7Bran%3Dtrue%3B%7D%7Dreturn%20ran%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Runs%20a%20list%20of%20effects%20for%20a%20given%20property.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7Bnumber%7D%20dedupeId%20Counter%20used%20for%20de-duping%20effects%0A%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Name%20of%20changed%20property%0A%20%20%20*%20%40param%20%7B*%7D%20props%20Changed%20properties%0A%20%20%20*%20%40param%20%7B*%7D%20oldProps%20Old%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffectsForProperty(inst%2Ceffects%2CdedupeId%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bvar%20ran%3Dfalse%3Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(prop)%3Aprop%3Bvar%20fxs%3Deffects%5BrootProperty%5D%3Bif(fxs)%7Bfor(var%20i%3D0%2Cl%3Dfxs.length%2Cfx%3Bi%3Cl%26%26(fx%3Dfxs%5Bi%5D)%3Bi%2B%2B)%7Bif((!fx.info%7C%7Cfx.info.lastRun!%3D%3DdedupeId)%26%26(!hasPaths%7C%7CpathMatchesTrigger(prop%2Cfx.trigger)))%7Bif(fx.info)%7Bfx.info.lastRun%3DdedupeId%3B%7Dfx.fn(inst%2Cprop%2Cprops%2ColdProps%2Cfx.info%2ChasPaths%2CextraArgs)%3Bran%3Dtrue%3B%7D%7D%7Dreturn%20ran%3B%7D%2F**%0A%20%20%20*%20Determines%20whether%20a%20property%2Fpath%20that%20has%20changed%20matches%20the%20trigger%0A%20%20%20*%20criteria%20for%20an%20effect.%20%20A%20trigger%20is%20a%20descriptor%20with%20the%20following%0A%20%20%20*%20structure%2C%20which%20matches%20the%20descriptors%20returned%20from%20%60parseArg%60.%0A%20%20%20*%20e.g.%20for%20%60foo.bar.*%60%3A%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20trigger%3A%20%7B%0A%20%20%20*%20%20%20name%3A%20'a.b'%2C%0A%20%20%20*%20%20%20structured%3A%20true%2C%0A%20%20%20*%20%20%20wildcard%3A%20true%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20If%20no%20trigger%20is%20given%2C%20the%20path%20is%20deemed%20to%20match.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20or%20property%20that%20changed%0A%20%20%20*%20%40param%20%7BDataTrigger%7D%20trigger%20Descriptor%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20path%20matched%20the%20trigger%0A%20%20%20*%2Ffunction%20pathMatchesTrigger(path%2Ctrigger)%7Bif(trigger)%7Bvar%20triggerPath%3Dtrigger.name%3Breturn%20triggerPath%3D%3Dpath%7C%7Ctrigger.structured%26%26Polymer.Path.isAncestor(triggerPath%2Cpath)%7C%7Ctrigger.wildcard%26%26Polymer.Path.isDescendant(triggerPath%2Cpath)%3B%7Delse%7Breturn%20true%3B%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22observer%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Calls%20the%20method%20with%20%60info.methodName%60%20on%20the%20instance%2C%20passing%20the%0A%20%20%20*%20new%20and%20old%20values.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runObserverEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20fn%3Dtypeof%20info.method%3D%3D%3D%22string%22%3Finst%5Binfo.method%5D%3Ainfo.method%3Bvar%20changedProp%3Dinfo.property%3Bif(fn)%7Bfn.call(inst%2Cinst.__data%5BchangedProp%5D%2ColdProps%5BchangedProp%5D)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('observer%20method%20%60'%2Binfo.method%2B'%60%20not%20defined')%3B%7D%7D%2F**%0A%20%20%20*%20Runs%20%22notify%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20will%20dispatch%20path%20notification%20events%20in%20the%20case%20that%20the%20property%0A%20%20%20*%20changed%20was%20a%20path%20and%20the%20root%20property%20for%20that%20path%20didn't%20have%20a%0A%20%20%20*%20%22notify%22%20effect.%20%20This%20is%20to%20maintain%201.0%20behavior%20that%20did%20not%20require%0A%20%20%20*%20%60notify%3A%20true%60%20to%20ensure%20object%20sub-property%20notifications%20were%0A%20%20%20*%20sent.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20notifyProps%20Bag%20of%20properties%20to%20notify%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffects(inst%2CnotifyProps%2Cprops%2ColdProps%2ChasPaths)%7B%2F%2F%20Notify%0Avar%20fxs%3Dinst%5BTYPES.NOTIFY%5D%3Bvar%20notified%3Dvoid%200%3Bvar%20id%3DdedupeId%2B%2B%3B%2F%2F%20Try%20normal%20notify%20effects%3B%20if%20none%2C%20fall%20back%20to%20try%20path%20notification%0Afor(var%20prop%20in%20notifyProps)%7Bif(notifyProps%5Bprop%5D)%7Bif(fxs%26%26runEffectsForProperty(inst%2Cfxs%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths))%7Bnotified%3Dtrue%3B%7Delse%20if(hasPaths%26%26notifyPath(inst%2Cprop%2Cprops))%7Bnotified%3Dtrue%3B%7D%7D%7D%2F%2F%20Flush%20host%20if%20we%20actually%20notified%20and%20host%20was%20batching%0A%2F%2F%20And%20the%20host%20has%20already%20initialized%20clients%3B%20this%20prevents%0A%2F%2F%20an%20issue%20with%20a%20host%20observing%20data%20changes%20before%20clients%20are%20ready.%0Avar%20host%3Dvoid%200%3Bif(notified%26%26(host%3Dinst.__dataHost)%26%26host._invalidateProperties)%7Bhost._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20with%20path%20information%20in%20the%20detail%0A%20%20%20*%20object%20to%20indicate%20a%20sub-path%20of%20the%20property%20was%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20that%20was%20changed%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20path%20was%20notified%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifyPath(inst%2Cpath%2Cprops)%7Bvar%20rootProperty%3DPolymer.Path.root(path)%3Bif(rootProperty!%3D%3Dpath)%7Bvar%20eventName%3DPolymer.CaseMap.camelToDashCase(rootProperty)%2B'-changed'%3BdispatchNotifyEvent(inst%2CeventName%2Cprops%5Bpath%5D%2Cpath)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20to%20indicate%20a%20property%20(or%20path)%0A%20%20%20*%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20The%20name%20of%20the%20event%20to%20send%20('%7Bproperty%7D-changed')%0A%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20of%20the%20changed%20property%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20null%20%7C%20undefined%7D%20path%20If%20a%20sub-path%20of%20this%20property%20changed%2C%20the%20path%0A%20%20%20*%20%20%20that%20changed%20(optional).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2Ffunction%20dispatchNotifyEvent(inst%2CeventName%2Cvalue%2Cpath)%7Bvar%20detail%3D%7Bvalue%3Avalue%2CqueueProperty%3Atrue%7D%3Bif(path)%7Bdetail.path%3Dpath%3B%7D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finst.dispatchEvent(new%20CustomEvent(eventName%2C%7Bdetail%3Adetail%7D))%3B%7D%2F**%0A%20%20%20*%20Implements%20the%20%22notify%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Dispatches%20a%20non-bubbling%20event%20named%20%60info.eventName%60%20on%20the%20instance%0A%20%20%20*%20with%20a%20detail%20object%20containing%20the%20new%20%60value%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo%2ChasPaths)%7Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(property)%3Aproperty%3Bvar%20path%3DrootProperty!%3Dproperty%3Fproperty%3Anull%3Bvar%20value%3Dpath%3FPolymer.Path.get(inst%2Cpath)%3Ainst.__data%5Bproperty%5D%3Bif(path%26%26value%3D%3D%3Dundefined)%7Bvalue%3Dprops%5Bproperty%5D%3B%2F%2F%20specifically%20for%20.splices%0A%7DdispatchNotifyEvent(inst%2Cinfo.eventName%2Cvalue%2Cpath)%3B%7D%2F**%0A%20%20%20*%20Handler%20function%20for%202-way%20notification%20events.%20Receives%20context%0A%20%20%20*%20information%20captured%20in%20the%20%60addNotifyListener%60%20closure%20from%20the%0A%20%20%20*%20%60__notifyListeners%60%20metadata.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20value%20of%20the%20notified%20property%20to%20the%20host%20property%20or%20path.%20%20If%0A%20%20%20*%20the%20event%20contained%20path%20information%2C%20translate%20that%20path%20to%20the%20host%0A%20%20%20*%20scope's%20name%20for%20that%20path%20first.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BCustomEvent%7D%20event%20Notification%20event%20(e.g.%20'%3Cproperty%3E-changed')%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20handling%20the%20notification%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20fromProp%20Child%20element%20property%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bstring%7D%20toPath%20Host%20property%2Fpath%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bboolean%7D%20negate%20Whether%20the%20binding%20was%20negated%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20handleNotification(event%2Cinst%2CfromProp%2CtoPath%2Cnegate)%7Bvar%20value%3Dvoid%200%3Bvar%20detail%3D%2F**%20%40type%20%7BObject%7D%20*%2Fevent.detail%3Bvar%20fromPath%3Ddetail%26%26detail.path%3Bif(fromPath)%7BtoPath%3DPolymer.Path.translate(fromProp%2CtoPath%2CfromPath)%3Bvalue%3Ddetail%26%26detail.value%3B%7Delse%7Bvalue%3Devent.currentTarget%5BfromProp%5D%3B%7Dvalue%3Dnegate%3F!value%3Avalue%3Bif(!inst%5BTYPES.READ_ONLY%5D%7C%7C!inst%5BTYPES.READ_ONLY%5D%5BtoPath%5D)%7Bif(inst._setPendingPropertyOrPath(toPath%2Cvalue%2Ctrue%2CBoolean(fromPath))%26%26(!detail%7C%7C!detail.queueProperty))%7Binst._invalidateProperties()%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22reflect%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20attribute%20named%20%60info.attrName%60%20to%20the%20given%20property%20value.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runReflectEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20value%3Dinst.__data%5Bproperty%5D%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cinfo.attrName%2C'attribute'%2C%2F**%20%40type%20%7BNode%7D%20*%2Finst)%3B%7Dinst._propertyToAttribute(property%2Cinfo.attrName%2Cvalue)%3B%7D%2F**%0A%20%20%20*%20Runs%20%22computed%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20continues%20to%20run%20computed%20effects%20based%20on%20the%20output%20of%20each%20pass%20until%0A%20%20%20*%20there%20are%20no%20more%20newly%20computed%20properties.%20%20This%20ensures%20that%20all%0A%20%20%20*%20properties%20that%20will%20be%20computed%20by%20the%20initial%20set%20of%20changes%20are%0A%20%20%20*%20computed%20before%20other%20effects%20(binding%20propagation%2C%20observers%2C%20and%20notify)%0A%20%20%20*%20run.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffects(inst%2CchangedProps%2ColdProps%2ChasPaths)%7Bvar%20computeEffects%3Dinst%5BTYPES.COMPUTE%5D%3Bif(computeEffects)%7Bvar%20inputProps%3DchangedProps%3Bwhile(runEffects(inst%2CcomputeEffects%2CinputProps%2ColdProps%2ChasPaths))%7BObject.assign(oldProps%2Cinst.__dataOld)%3BObject.assign(changedProps%2Cinst.__dataPending)%3BinputProps%3Dinst.__dataPending%3Binst.__dataPending%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22computed%20property%22%20effect%20by%20running%20the%20method%20with%20the%0A%20%20%20*%20values%20of%20the%20arguments%20specified%20in%20the%20%60info%60%20object%20and%20setting%20the%0A%20%20%20*%20return%20value%20to%20the%20computed%20property%20specified.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20result%3DrunMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%3Bvar%20computedProp%3Dinfo.methodInfo%3Bif(inst.__dataHasAccessor%26%26inst.__dataHasAccessor%5BcomputedProp%5D)%7Binst._setPendingProperty(computedProp%2Cresult%2Ctrue)%3B%7Delse%7Binst%5BcomputedProp%5D%3Dresult%3B%7D%7D%2F**%0A%20%20%20*%20Computes%20path%20changes%20based%20on%20path%20links%20set%20up%20using%20the%20%60linkPaths%60%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20whose%20props%20are%20changing%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3C(string%7Cnumber)%3E%7D%20path%20Path%20that%20has%20changed%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20changed%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeLinkedPaths(inst%2Cpath%2Cvalue)%7Bvar%20links%3Dinst.__dataLinkedPaths%3Bif(links)%7Bvar%20link%3Dvoid%200%3Bfor(var%20a%20in%20links)%7Bvar%20b%3Dlinks%5Ba%5D%3Bif(Polymer.Path.isDescendant(a%2Cpath))%7Blink%3DPolymer.Path.translate(a%2Cb%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7Delse%20if(Polymer.Path.isDescendant(b%2Cpath))%7Blink%3DPolymer.Path.translate(b%2Ca%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7D%7D%7D%7D%2F%2F%20--%20bindings%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Adds%20binding%20metadata%20to%20the%20current%20%60nodeInfo%60%2C%20and%20binding%20effects%0A%20%20%20*%20for%20all%20part%20dependencies%20to%20%60templateInfo%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20*%20%40param%20%7Bstring%7D%20kind%20Binding%20kind%2C%20either%20'property'%2C%20'attribute'%2C%20or%20'text'%0A%20%20%20*%20%40param%20%7Bstring%7D%20target%20Target%20property%20name%0A%20%20%20*%20%40param%20%7B!Array%3C!BindingPart%3E%7D%20parts%20Array%20of%20binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bstring%3D%7D%20literal%20Literal%20text%20surrounding%20binding%20parts%20(specified%0A%20%20%20*%20%20%20only%20for%20'property'%20bindings%2C%20since%20these%20must%20be%20initialized%20as%20part%0A%20%20%20*%20%20%20of%20boot-up)%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addBinding(constructor%2CtemplateInfo%2CnodeInfo%2Ckind%2Ctarget%2Cparts%2Cliteral)%7B%2F%2F%20Create%20binding%20metadata%20and%20add%20to%20nodeInfo%0AnodeInfo.bindings%3DnodeInfo.bindings%7C%7C%5B%5D%3Bvar%2F**%20Binding%20*%2Fbinding%3D%7Bkind%3Akind%2Ctarget%3Atarget%2Cparts%3Aparts%2Cliteral%3Aliteral%2CisCompound%3Aparts.length!%3D%3D1%7D%3BnodeInfo.bindings.push(binding)%3B%2F%2F%20Add%20listener%20info%20to%20binding%20metadata%0Aif(shouldAddListener(binding))%7Bvar%20_binding%24parts%24%3Dbinding.parts%5B0%5D%2Cevent%3D_binding%24parts%24.event%2Cnegate%3D_binding%24parts%24.negate%3Bbinding.listenerEvent%3Devent%7C%7CCaseMap.camelToDashCase(target)%2B'-changed'%3Bbinding.listenerNegate%3Dnegate%3B%7D%2F%2F%20Add%20%22propagate%22%20property%20effects%20to%20templateInfo%0Avar%20index%3DtemplateInfo.nodeInfoList.length%3Bfor(var%20i%3D0%3Bi%3Cbinding.parts.length%3Bi%2B%2B)%7Bvar%20part%3Dbinding.parts%5Bi%5D%3Bpart.compoundIndex%3Di%3BaddEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%3B%7D%7D%2F**%0A%20%20%20*%20Adds%20property%20effects%20to%20the%20given%20%60templateInfo%60%20for%20the%20given%20binding%0A%20%20%20*%20part.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20into%20%60nodeInfoList%60%20for%20this%20node%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20addEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%7Bif(!part.literal)%7Bif(binding.kind%3D%3D%3D'attribute'%26%26binding.target%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Cannot%20set%20attribute%20'%2Bbinding.target%2B'%20because%20%22-%22%20is%20not%20a%20valid%20attribute%20starting%20character')%3B%7Delse%7Bvar%20dependencies%3Dpart.dependencies%3Bvar%20info%3D%7Bindex%3Aindex%2Cbinding%3Abinding%2Cpart%3Apart%2Cevaluator%3Aconstructor%7D%3Bfor(var%20j%3D0%3Bj%3Cdependencies.length%3Bj%2B%2B)%7Bvar%20trigger%3Ddependencies%5Bj%5D%3Bif(typeof%20trigger%3D%3D'string')%7Btrigger%3DparseArg(trigger)%3Btrigger.wildcard%3Dtrue%3B%7Dconstructor._addTemplatePropertyEffect(templateInfo%2Ctrigger.rootProperty%2C%7Bfn%3ArunBindingEffect%2Cinfo%3Ainfo%2Ctrigger%3Atrigger%7D)%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22binding%22%20(property%2Fpath%20binding)%20effect.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20binding%20syntax%20is%20overridable%20via%20%60_parseBindings%60%20and%0A%20%20%20*%20%60_evaluateBinding%60.%20%20This%20method%20will%20call%20%60_evaluateBinding%60%20for%20any%0A%20%20%20*%20non-literal%20parts%20returned%20from%20%60_parseBindings%60.%20%20However%2C%0A%20%20%20*%20there%20is%20no%20support%20for%20_path_%20bindings%20via%20custom%20binding%20parts%2C%0A%20%20%20*%20as%20this%20is%20specific%20to%20Polymer's%20path%20binding%20syntax.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7BArray%7D%20nodeList%20List%20of%20nodes%20associated%20with%20%60nodeInfoList%60%20template%0A%20%20%20*%20%20%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runBindingEffect(inst%2Cpath%2Cprops%2ColdProps%2Cinfo%2ChasPaths%2CnodeList)%7Bvar%20node%3DnodeList%5Binfo.index%5D%3Bvar%20binding%3Dinfo.binding%3Bvar%20part%3Dinfo.part%3B%2F%2F%20Subpath%20notification%3A%20transform%20path%20and%20set%20to%20client%0A%2F%2F%20e.g.%3A%20foo%3D%22%7B%7Bobj.sub%7D%7D%22%2C%20path%3A%20'obj.sub.prop'%2C%20set%20'foo.prop'%3Dobj.sub.prop%0Aif(hasPaths%26%26part.source%26%26path.length%3Epart.source.length%26%26binding.kind%3D%3D'property'%26%26!binding.isCompound%26%26node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bbinding.target%5D)%7Bvar%20value%3Dprops%5Bpath%5D%3Bpath%3DPolymer.Path.translate(part.source%2Cbinding.target%2Cpath)%3Bif(node._setPendingPropertyOrPath(path%2Cvalue%2Cfalse%2Ctrue))%7Binst._enqueueClient(node)%3B%7D%7Delse%7Bvar%20_value%3Dinfo.evaluator._evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%3B%2F%2F%20Propagate%20value%20to%20child%0AapplyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2C_value)%3B%7D%7D%2F**%0A%20%20%20*%20Sets%20the%20value%20for%20an%20%22binding%22%20(binding)%20effect%20to%20a%20node%2C%0A%20%20%20*%20either%20as%20a%20property%20or%20attribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20owning%20the%20binding%20effect%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Target%20node%20for%20binding%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20applyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2Cvalue)%7Bvalue%3DcomputeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cbinding.target%2Cbinding.kind%2Cnode)%3B%7Dif(binding.kind%3D%3D'attribute')%7B%2F%2F%20Attribute%20binding%0Ainst._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%2Cvalue%2Cbinding.target)%3B%7Delse%7B%2F%2F%20Property%20binding%0Avar%20prop%3Dbinding.target%3Bif(node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bprop%5D)%7Bif(!node%5BTYPES.READ_ONLY%5D%7C%7C!node%5BTYPES.READ_ONLY%5D%5Bprop%5D)%7Bif(node._setPendingProperty(prop%2Cvalue))%7Binst._enqueueClient(node)%3B%7D%7D%7Delse%7Binst._setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%3B%7D%7D%7D%2F**%0A%20%20%20*%20Transforms%20an%20%22binding%22%20effect%20value%20based%20on%20compound%20%26%20negation%0A%20%20%20*%20effect%20metadata%2C%20as%20well%20as%20handling%20for%20special-case%20properties%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20the%20value%20will%20be%20set%20to%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Transformed%20value%20to%20set%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%7Bif(binding.isCompound)%7Bvar%20storage%3Dnode.__dataCompoundStorage%5Bbinding.target%5D%3Bstorage%5Bpart.compoundIndex%5D%3Dvalue%3Bvalue%3Dstorage.join('')%3B%7Dif(binding.kind!%3D%3D'attribute')%7B%2F%2F%20Some%20browsers%20serialize%20%60undefined%60%20to%20%60%22undefined%22%60%0Aif(binding.target%3D%3D%3D'textContent'%7C%7Cbinding.target%3D%3D%3D'value'%26%26(node.localName%3D%3D%3D'input'%7C%7Cnode.localName%3D%3D%3D'textarea'))%7Bvalue%3Dvalue%3D%3Dundefined%3F''%3Avalue%3B%7D%7Dreturn%20value%3B%7D%2F**%0A%20%20%20*%20Returns%20true%20if%20a%20binding's%20metadata%20meets%20all%20the%20requirements%20to%20allow%0A%20%20%20*%202-way%20binding%2C%20and%20therefore%20a%20%60%3Cproperty%3E-changed%60%20event%20listener%20should%20be%0A%20%20%20*%20added%3A%0A%20%20%20*%20-%20used%20curly%20braces%0A%20%20%20*%20-%20is%20a%20property%20(not%20attribute)%20binding%0A%20%20%20*%20-%20is%20not%20a%20textContent%20binding%0A%20%20%20*%20-%20is%20not%20compound%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%202-way%20listener%20should%20be%20added%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20shouldAddListener(binding)%7Breturn%20Boolean(binding.target)%26%26binding.kind!%3D'attribute'%26%26binding.kind!%3D'text'%26%26!binding.isCompound%26%26binding.parts%5B0%5D.mode%3D%3D%3D'%7B'%3B%7D%2F**%0A%20%20%20*%20Setup%20compound%20binding%20storage%20structures%2C%20notify%20listeners%2C%20and%20dataHost%0A%20%20%20*%20references%20onto%20the%20bound%20nodeList.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20that%20bas%20been%20previously%20bound%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupBindings(inst%2CtemplateInfo)%7B%2F%2F%20Setup%20compound%20storage%2C%20dataHost%2C%20and%20notify%20listeners%0Avar%20nodeList%3DtemplateInfo.nodeList%2CnodeInfoList%3DtemplateInfo.nodeInfoList%3Bif(nodeInfoList.length)%7Bfor(var%20i%3D0%3Bi%3CnodeInfoList.length%3Bi%2B%2B)%7Bvar%20info%3DnodeInfoList%5Bi%5D%3Bvar%20node%3DnodeList%5Bi%5D%3Bvar%20bindings%3Dinfo.bindings%3Bif(bindings)%7Bfor(var%20_i%3D0%3B_i%3Cbindings.length%3B_i%2B%2B)%7Bvar%20binding%3Dbindings%5B_i%5D%3BsetupCompoundStorage(node%2Cbinding)%3BaddNotifyListener(node%2Cinst%2Cbinding)%3B%7D%7Dnode.__dataHost%3Dinst%3B%7D%7D%7D%2F**%0A%20%20%20*%20Initializes%20%60__dataCompoundStorage%60%20local%20storage%20on%20a%20bound%20node%20with%0A%20%20%20*%20initial%20literal%20data%20for%20compound%20bindings%2C%20and%20sets%20the%20joined%0A%20%20%20*%20literal%20parts%20to%20the%20bound%20property.%0A%20%20%20*%0A%20%20%20*%20When%20changes%20to%20compound%20parts%20occur%2C%20they%20are%20first%20set%20into%20the%20compound%0A%20%20%20*%20storage%20array%20for%20that%20property%2C%20and%20then%20the%20array%20is%20joined%20to%20result%20in%0A%20%20%20*%20the%20final%20value%20set%20to%20the%20property%2Fattribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Bound%20node%20to%20initialize%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupCompoundStorage(node%2Cbinding)%7Bif(binding.isCompound)%7B%2F%2F%20Create%20compound%20storage%20map%0Avar%20storage%3Dnode.__dataCompoundStorage%7C%7C(node.__dataCompoundStorage%3D%7B%7D)%3Bvar%20parts%3Dbinding.parts%3B%2F%2F%20Copy%20literals%20from%20parts%20into%20storage%20for%20this%20binding%0Avar%20literals%3Dnew%20Array(parts.length)%3Bfor(var%20j%3D0%3Bj%3Cparts.length%3Bj%2B%2B)%7Bliterals%5Bj%5D%3Dparts%5Bj%5D.literal%3B%7Dvar%20target%3Dbinding.target%3Bstorage%5Btarget%5D%3Dliterals%3B%2F%2F%20Configure%20properties%20with%20their%20literal%20parts%0Aif(binding.literal%26%26binding.kind%3D%3D'property')%7Bnode%5Btarget%5D%3Dbinding.literal%3B%7D%7D%7D%2F**%0A%20%20%20*%20Adds%20a%202-way%20binding%20notification%20event%20listener%20to%20the%20node%20specified%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20node%20Child%20element%20to%20add%20listener%20to%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20to%20handle%20notification%20event%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addNotifyListener(node%2Cinst%2Cbinding)%7Bif(binding.listenerEvent)%7Bvar%20part%3Dbinding.parts%5B0%5D%3Bnode.addEventListener(binding.listenerEvent%2Cfunction(e)%7BhandleNotification(e%2Cinst%2Cbinding.target%2Cpart.source%2Cpart.negate)%3B%7D)%3B%7D%7D%2F%2F%20--%20for%20method-based%20effects%20(complexObserver%20%26%20computed)%20--------------%0A%2F**%0A%20%20%20*%20Adds%20property%20effects%20for%20each%20argument%20in%20the%20method%20signature%20(and%0A%20%20%20*%20optionally%2C%20for%20the%20method%20name%20if%20%60dynamic%60%20is%20true)%20that%20calls%20the%0A%20%20%20*%20provided%20effect%20function.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BElement%20%7C%20Object%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Type%20of%20property%20effect%20to%20add%0A%20%20%20*%20%40param%20%7BFunction%7D%20effectFn%20Function%20to%20run%20when%20arguments%20change%0A%20%20%20*%20%40param%20%7B*%3D%7D%20methodInfo%20Effect-specific%20information%20to%20be%20included%20in%0A%20%20%20*%20%20%20method%20effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%20Note%2C%0A%20%20%20*%20%20%20defaults%20to%20true%20if%20the%20signature%20is%20static%20(sig.static%20is%20true).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20createMethodEffect(model%2Csig%2Ctype%2CeffectFn%2CmethodInfo%2CdynamicFn)%7BdynamicFn%3Dsig.static%7C%7CdynamicFn%26%26((typeof%20dynamicFn%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(dynamicFn))!%3D%3D'object'%7C%7CdynamicFn%5Bsig.methodName%5D)%3Bvar%20info%3D%7BmethodName%3Asig.methodName%2Cargs%3Asig.args%2CmethodInfo%3AmethodInfo%2CdynamicFn%3AdynamicFn%7D%3Bfor(var%20i%3D0%2Carg%3Bi%3Csig.args.length%26%26(arg%3Dsig.args%5Bi%5D)%3Bi%2B%2B)%7Bif(!arg.literal)%7Bmodel._addPropertyEffect(arg.rootProperty%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%2Ctrigger%3Aarg%7D)%3B%7D%7Dif(dynamicFn)%7Bmodel._addPropertyEffect(sig.methodName%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%7D)%3B%7D%7D%2F**%0A%20%20%20*%20Calls%20a%20method%20with%20arguments%20marshaled%20from%20properties%20on%20the%20instance%0A%20%20%20*%20based%20on%20the%20method%20signature%20contained%20in%20the%20effect%20metadata.%0A%20%20%20*%0A%20%20%20*%20Multi-property%20observers%2C%20computed%20properties%2C%20and%20inline%20computing%0A%20%20%20*%20functions%20call%20this%20function%20to%20invoke%20the%20method%2C%20then%20use%20the%20return%0A%20%20%20*%20value%20accordingly.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20return%20value%20from%20the%20method%20invocation%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Avar%20context%3Dinst._methodHost%7C%7Cinst%3Bvar%20fn%3Dcontext%5Binfo.methodName%5D%3Bif(fn)%7Bvar%20args%3Dinst._marshalArgs(info.args%2Cproperty%2Cprops)%3Breturn%20fn.apply(context%2Cargs)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('method%20%60'%2Binfo.methodName%2B'%60%20not%20defined')%3B%7D%7Dvar%20emptyArray%3D%5B%5D%3B%2F%2F%20Regular%20expressions%20used%20for%20binding%0Avar%20IDENT%3D'(%3F%3A'%2B'%5Ba-zA-Z_%24%5D%5B%5C%5Cw.%3A%24%5C%5C-*%5D*'%2B')'%3Bvar%20NUMBER%3D'(%3F%3A'%2B'%5B-%2B%5D%3F%5B0-9%5D*%5C%5C.%3F%5B0-9%5D%2B(%3F%3A%5BeE%5D%5B-%2B%5D%3F%5B0-9%5D%2B)%3F'%2B')'%3Bvar%20SQUOTE_STRING%3D'(%3F%3A'%2B'%5C'(%3F%3A%5B%5E%5C'%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%5C''%2B')'%3Bvar%20DQUOTE_STRING%3D'(%3F%3A'%2B'%22(%3F%3A%5B%5E%22%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%22'%2B')'%3Bvar%20STRING%3D'(%3F%3A'%2BSQUOTE_STRING%2B'%7C'%2BDQUOTE_STRING%2B')'%3Bvar%20ARGUMENT%3D'(%3F%3A('%2BIDENT%2B'%7C'%2BNUMBER%2B'%7C'%2BSTRING%2B')%5C%5Cs*'%2B')'%3Bvar%20ARGUMENTS%3D'(%3F%3A'%2BARGUMENT%2B'(%3F%3A%2C%5C%5Cs*'%2BARGUMENT%2B')*'%2B')'%3Bvar%20ARGUMENT_LIST%3D'(%3F%3A'%2B'%5C%5C(%5C%5Cs*'%2B'(%3F%3A'%2BARGUMENTS%2B'%3F'%2B')'%2B'%5C%5C)%5C%5Cs*'%2B')'%3Bvar%20BINDING%3D'('%2BIDENT%2B'%5C%5Cs*'%2BARGUMENT_LIST%2B'%3F'%2B')'%3B%2F%2F%20Group%203%0Avar%20OPEN_BRACKET%3D'(%5C%5C%5B%5C%5C%5B%7C%7B%7B)'%2B'%5C%5Cs*'%3Bvar%20CLOSE_BRACKET%3D'(%3F%3A%5D%5D%7C%7D%7D)'%3Bvar%20NEGATE%3D'(%3F%3A(!)%5C%5Cs*)%3F'%3B%2F%2F%20Group%202%0Avar%20EXPRESSION%3DOPEN_BRACKET%2BNEGATE%2BBINDING%2BCLOSE_BRACKET%3Bvar%20bindingRegex%3Dnew%20RegExp(EXPRESSION%2C%22g%22)%3B%2F**%0A%20%20%20*%20Create%20a%20string%20from%20binding%20parts%20of%20all%20the%20literal%20parts%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3CBindingPart%3E%7D%20parts%20All%20parts%20to%20stringify%0A%20%20%20*%20%40return%20%7Bstring%7D%20String%20made%20from%20the%20literal%20parts%0A%20%20%20*%2Ffunction%20literalFromParts(parts)%7Bvar%20s%3D''%3Bfor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bvar%20literal%3Dparts%5Bi%5D.literal%3Bs%2B%3Dliteral%7C%7C''%3B%7Dreturn%20s%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20expression%20string%20for%20a%20method%20signature%2C%20and%20returns%20a%20metadata%0A%20%20%20*%20describing%20the%20method%20in%20terms%20of%20%60methodName%60%2C%20%60static%60%20(whether%20all%20the%0A%20%20%20*%20arguments%20are%20literals)%2C%20and%20an%20array%20of%20%60args%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20expression%20The%20expression%20to%20parse%0A%20%20%20*%20%40return%20%7B%3FMethodSignature%7D%20The%20method%20metadata%20object%20if%20a%20method%20expression%20was%0A%20%20%20*%20%20%20found%2C%20otherwise%20%60undefined%60%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseMethod(expression)%7B%2F%2F%20tries%20to%20match%20valid%20javascript%20property%20names%0Avar%20m%3Dexpression.match(%2F(%5B%5E%5Cs%5D%2B%3F)%5C((%5B%5Cs%5CS%5D*)%5C)%2F)%3Bif(m)%7Bvar%20methodName%3Dm%5B1%5D%3Bvar%20sig%3D%7BmethodName%3AmethodName%2Cstatic%3Atrue%2Cargs%3AemptyArray%7D%3Bif(m%5B2%5D.trim())%7B%2F%2F%20replace%20escaped%20commas%20with%20comma%20entity%2C%20split%20on%20un-escaped%20commas%0Avar%20args%3Dm%5B2%5D.replace(%2F%5C%5C%2C%2Fg%2C'%26comma%3B').split('%2C')%3Breturn%20parseArgs(args%2Csig)%3B%7Delse%7Breturn%20sig%3B%7D%7Dreturn%20null%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20array%20of%20arguments%20and%20sets%20the%20%60args%60%20property%20of%20the%20supplied%0A%20%20%20*%20signature%20metadata%20object.%20Sets%20the%20%60static%60%20property%20to%20false%20if%20any%0A%20%20%20*%20argument%20is%20a%20non-literal.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3Cstring%3E%7D%20argList%20Array%20of%20argument%20names%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%20object%0A%20%20%20*%20%40return%20%7B!MethodSignature%7D%20The%20updated%20signature%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArgs(argList%2Csig)%7Bsig.args%3DargList.map(function(rawArg)%7Bvar%20arg%3DparseArg(rawArg)%3Bif(!arg.literal)%7Bsig.static%3Dfalse%3B%7Dreturn%20arg%3B%7D%2Cthis)%3Breturn%20sig%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20individual%20argument%2C%20and%20returns%20an%20argument%20metadata%20object%0A%20%20%20*%20with%20the%20following%20fields%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%7B%0A%20%20%20*%20%20%20%20%20value%3A%20'prop'%2C%20%20%20%20%20%20%20%20%2F%2F%20property%2Fpath%20or%20literal%20value%0A%20%20%20*%20%20%20%20%20literal%3A%20false%2C%20%20%20%20%20%20%20%2F%2F%20whether%20argument%20is%20a%20literal%0A%20%20%20*%20%20%20%20%20structured%3A%20false%2C%20%20%20%20%2F%2F%20whether%20the%20property%20is%20a%20path%0A%20%20%20*%20%20%20%20%20rootProperty%3A%20'prop'%2C%20%2F%2F%20the%20root%20property%20of%20the%20path%0A%20%20%20*%20%20%20%20%20wildcard%3A%20false%20%20%20%20%20%20%20%2F%2F%20whether%20the%20argument%20was%20a%20wildcard%20'.*'%20path%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20rawArg%20The%20string%20value%20of%20the%20argument%0A%20%20%20*%20%40return%20%7B!MethodArg%7D%20Argument%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArg(rawArg)%7B%2F%2F%20clean%20up%20whitespace%0Avar%20arg%3DrawArg.trim()%2F%2F%20replace%20comma%20entity%20with%20comma%0A.replace(%2F%26comma%3B%2Fg%2C'%2C')%2F%2F%20repair%20extra%20escape%20sequences%3B%20note%20only%20commas%20strictly%20need%0A%2F%2F%20escaping%2C%20but%20we%20allow%20any%20other%20char%20to%20be%20escaped%20since%20its%0A%2F%2F%20likely%20users%20will%20do%20this%0A.replace(%2F%5C%5C(.)%2Fg%2C'%5C%241')%3B%2F%2F%20basic%20argument%20descriptor%0Avar%20a%3D%7Bname%3Aarg%2Cvalue%3A''%2Cliteral%3Afalse%7D%3B%2F%2F%20detect%20literal%20value%20(must%20be%20String%20or%20Number)%0Avar%20fc%3Darg%5B0%5D%3Bif(fc%3D%3D%3D'-')%7Bfc%3Darg%5B1%5D%3B%7Dif(fc%3E%3D'0'%26%26fc%3C%3D'9')%7Bfc%3D'%23'%3B%7Dswitch(fc)%7Bcase%22'%22%3Acase'%22'%3Aa.value%3Darg.slice(1%2C-1)%3Ba.literal%3Dtrue%3Bbreak%3Bcase'%23'%3Aa.value%3DNumber(arg)%3Ba.literal%3Dtrue%3Bbreak%3B%7D%2F%2F%20if%20not%20literal%2C%20look%20for%20structured%20path%0Aif(!a.literal)%7Ba.rootProperty%3DPolymer.Path.root(arg)%3B%2F%2F%20detect%20structured%20path%20(has%20dots)%0Aa.structured%3DPolymer.Path.isPath(arg)%3Bif(a.structured)%7Ba.wildcard%3Darg.slice(-2)%3D%3D'.*'%3Bif(a.wildcard)%7Ba.name%3Darg.slice(0%2C-2)%3B%7D%7D%7Dreturn%20a%3B%7D%2F%2F%20data%20api%0A%2F**%0A%20%20%20*%20Sends%20array%20splice%20notifications%20(%60.splices%60%20and%20%60.length%60)%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20_notifySplices(inst%2Carray%2Cpath%2Csplices)%7Bvar%20splicesPath%3Dpath%2B'.splices'%3Binst.notifyPath(splicesPath%2C%7BindexSplices%3Asplices%7D)%3Binst.notifyPath(path%2B'.length'%2Carray.length)%3B%2F%2F%20Null%20here%20to%20allow%20potentially%20large%20splice%20records%20to%20be%20GC'ed.%0Ainst.__data%5BsplicesPath%5D%3D%7BindexSplices%3Anull%7D%3B%7D%2F**%0A%20%20%20*%20Creates%20a%20splice%20record%20and%20sends%20an%20array%20splice%20notification%20for%0A%20%20%20*%20the%20described%20mutation%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20at%20which%20the%20array%20mutation%20occurred%0A%20%20%20*%20%40param%20%7Bnumber%7D%20addedCount%20Number%20of%20added%20items%0A%20%20%20*%20%40param%20%7BArray%7D%20removed%20Array%20of%20removed%20items%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifySplice(inst%2Carray%2Cpath%2Cindex%2CaddedCount%2Cremoved)%7B_notifySplices(inst%2Carray%2Cpath%2C%5B%7Bindex%3Aindex%2CaddedCount%3AaddedCount%2Cremoved%3Aremoved%2Cobject%3Aarray%2Ctype%3A'splice'%7D%5D)%3B%7D%2F**%0A%20%20%20*%20Returns%20an%20upper-cased%20version%20of%20the%20string.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20String%20to%20uppercase%0A%20%20%20*%20%40return%20%7Bstring%7D%20Uppercased%20string%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20upper(name)%7Breturn%20name%5B0%5D.toUpperCase()%2Bname.substring(1)%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%20template%0A%20%20%20*%20binding%20and%20data%20observation%20(collectively%2C%20%22property%20effects%22)%20system.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20uses%20provides%20the%20following%20key%20static%20methods%20for%20adding%0A%20%20%20*%20property%20effects%20to%20an%20element%20class%3A%0A%20%20%20*%20-%20%60addPropertyEffect%60%0A%20%20%20*%20-%20%60createPropertyObserver%60%0A%20%20%20*%20-%20%60createMethodObserver%60%0A%20%20%20*%20-%20%60createNotifyingProperty%60%0A%20%20%20*%20-%20%60createReadOnlyProperty%60%0A%20%20%20*%20-%20%60createReflectedProperty%60%0A%20%20%20*%20-%20%60createComputedProperty%60%0A%20%20%20*%20-%20%60bindTemplate%60%0A%20%20%20*%0A%20%20%20*%20Each%20method%20creates%20one%20or%20more%20property%20accessors%2C%20along%20with%20metadata%0A%20%20%20*%20used%20by%20this%20mixin's%20implementation%20of%20%60_propertiesChanged%60%20to%20perform%0A%20%20%20*%20the%20property%20effects.%0A%20%20%20*%0A%20%20%20*%20Underscored%20versions%20of%20the%20above%20methods%20also%20exist%20on%20the%20element%0A%20%20%20*%20prototype%20for%20adding%20property%20effects%20on%20instances%20at%20runtime.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20this%20mixin%20overrides%20several%20%60PropertyAccessors%60%20methods%2C%20in%0A%20%20%20*%20many%20cases%20to%20maintain%20guarantees%20provided%20by%20the%20Polymer%201.x%20features%3B%0A%20%20%20*%20notably%20it%20changes%20property%20accessors%20to%20be%20synchronous%20by%20default%0A%20%20%20*%20whereas%20the%20default%20when%20using%20%60PropertyAccessors%60%20standalone%20is%20to%20be%0A%20%20%20*%20async%20by%20default.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.TemplateStamp%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%0A%20%20%20*%20template%20binding%20and%20data%20observation%20system.%0A%20%20%20*%2FPolymer.PropertyEffects%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20propertyEffectsBase%3DPolymer.TemplateStamp(Polymer.PropertyAccessors(superClass))%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BpropertyEffectsBase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyEffects%3Dfunction(_propertyEffectsBase)%7B_inherits(PropertyEffects%2C_propertyEffectsBase)%3Bfunction%20PropertyEffects()%7B_classCallCheck(this%2CPropertyEffects)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F%2F%2F%20Used%20to%20identify%20users%20of%20this%20mixin%2C%20ala%20instanceof%0Avar%20_this%3D_possibleConstructorReturn(this%2C(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)).call(this))%3B_this.__isPropertyEffectsClient%3Dtrue%3B%2F**%20%40type%20%7Bnumber%7D%20*%2F%2F%2F%20NOTE%3A%20used%20to%20track%20re-entrant%20calls%20to%20%60_flushProperties%60%0A%2F%2F%20path%20changes%20dirty%20check%20against%20%60__dataTemp%60%20only%20during%20one%20%22turn%22%0A%2F%2F%20and%20are%20cleared%20when%20%60__dataCounter%60%20returns%20to%200.%0A_this.__dataCounter%3D0%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsReady%3B%2F**%20%40type%20%7BArray%7D%20*%2F_this.__dataPendingClients%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataToNotify%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataLinkedPaths%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataHasPaths%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataCompoundStorage%3B%2F**%20%40type%20%7BPolymer_PropertyEffects%7D%20*%2F_this.__dataHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataTemp%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsInitialized%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__data%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataPending%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataOld%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__computeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__reflectEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__notifyEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__propagateEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__observeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__readOnly%3B%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2F_this.__templateInfo%3Breturn%20_this%3B%7D_createClass(PropertyEffects%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3BhostStack.registerHost(this)%3Bthis.__dataClientsReady%3Dfalse%3Bthis.__dataPendingClients%3Dnull%3Bthis.__dataToNotify%3Dnull%3Bthis.__dataLinkedPaths%3Dnull%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20May%20be%20set%20on%20instance%20prior%20to%20upgrade%0Athis.__dataCompoundStorage%3Dthis.__dataCompoundStorage%7C%7Cnull%3Bthis.__dataHost%3Dthis.__dataHost%7C%7Cnull%3Bthis.__dataTemp%3D%7B%7D%3Bthis.__dataClientsInitialized%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20provide%20a%0A%20%20%20%20%20%20%20*%20more%20efficient%20implementation%20of%20initializing%20properties%20from%0A%20%20%20%20%20%20%20*%20the%20prototype%20on%20the%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bthis.__data%3DObject.create(props)%3Bthis.__dataPending%3DObject.create(props)%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20avoid%20setting%0A%20%20%20%20%20%20%20*%20%60_setProperty%60's%20%60shouldNotify%3A%20true%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20instance%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7Bvar%20readOnly%3Dthis%5BTYPES.READ_ONLY%5D%3Bfor(var%20prop%20in%20props)%7Bif(!readOnly%7C%7C!readOnly%5Bprop%5D)%7Bthis.__dataPending%3Dthis.__dataPending%7C%7C%7B%7D%3Bthis.__dataOld%3Dthis.__dataOld%7C%7C%7B%7D%3Bthis.__data%5Bprop%5D%3Dthis.__dataPending%5Bprop%5D%3Dprops%5Bprop%5D%3B%7D%7D%7D%2F%2F%20Prototype%20setup%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60addPropertyEffect%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyEffect'%2Cvalue%3Afunction%20_addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis._createPropertyAccessor(property%2Ctype%3D%3DTYPES.READ_ONLY)%3B%2F%2F%20effects%20are%20accumulated%20into%20arrays%20per%20property%20based%20on%20type%0Avar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bif(!effects)%7Beffects%3Dthis%5Btype%5D%5Bproperty%5D%3D%5B%5D%3B%7Deffects.push(effect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20the%20given%20property%20effect.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20the%20effect%20was%20associated%20with%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removePropertyEffect'%2Cvalue%3Afunction%20_removePropertyEffect(property%2Ctype%2Ceffect)%7Bvar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bvar%20idx%3Deffects.indexOf(effect)%3Bif(idx%3E%3D0)%7Beffects.splice(idx%2C1)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20property%20effect%0A%20%20%20%20%20%20%20*%20of%20a%20certain%20type.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasPropertyEffect'%2Cvalue%3Afunction%20_hasPropertyEffect(property%2Ctype)%7Bvar%20effects%3Dthis%5Btype%5D%3Breturn%20Boolean(effects%26%26effects%5Bproperty%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22read%20only%22%0A%20%20%20%20%20%20%20*%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReadOnlyEffect'%2Cvalue%3Afunction%20_hasReadOnlyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.READ_ONLY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22notify%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasNotifyEffect'%2Cvalue%3Afunction%20_hasNotifyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.NOTIFY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22reflect%20to%20attribute%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReflectEffect'%2Cvalue%3Afunction%20_hasReflectEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.REFLECT)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22computed%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasComputedEffect'%2Cvalue%3Afunction%20_hasComputedEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.COMPUTE)%3B%7D%2F%2F%20Runtime%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20pending%20property%20or%20path.%20%20If%20the%20root%20property%20of%20the%20path%20in%0A%20%20%20%20%20%20%20*%20question%20had%20no%20accessor%2C%20the%20path%20is%20set%2C%20otherwise%20it%20is%20enqueued%0A%20%20%20%20%20%20%20*%20via%20%60_setPendingProperty%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20isolates%20relatively%20expensive%20functionality%20necessary%0A%20%20%20%20%20%20%20*%20for%20the%20public%20API%20(%60set%60%2C%20%60setProperties%60%2C%20%60notifyPath%60%2C%20and%20property%0A%20%20%20%20%20%20%20*%20change%20listeners%20via%20%7B%7B...%7D%7D%20bindings)%2C%20such%20that%20it%20is%20only%20done%0A%20%20%20%20%20%20%20*%20when%20paths%20enter%20the%20system%2C%20and%20not%20at%20every%20propagation%20step.%20%20It%0A%20%20%20%20%20%20%20*%20also%20sets%20a%20%60__dataHasPaths%60%20flag%20on%20the%20instance%20which%20is%20used%20to%0A%20%20%20%20%20%20%20*%20fast-path%20slower%20path-matching%20code%20in%20the%20property%20effects%20host%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60path%60%20can%20be%20a%20path%20string%20or%20array%20of%20path%20parts%20as%20accepted%20by%20the%0A%20%20%20%20%20%20%20*%20public%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20Set%20to%20true%20if%20this%20change%20should%0A%20%20%20%20%20%20%20*%20%20cause%20a%20property%20notification%20event%20dispatch%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20isPathNotification%20If%20the%20path%20being%20set%20is%20a%20path%0A%20%20%20%20%20%20%20*%20%20%20notification%20of%20an%20already%20changed%20value%2C%20as%20opposed%20to%20a%20request%0A%20%20%20%20%20%20%20*%20%20%20to%20set%20and%20notify%20the%20change.%20%20In%20the%20latter%20%60false%60%20case%2C%20a%20dirty%0A%20%20%20%20%20%20%20*%20%20%20check%20is%20performed%20and%20then%20the%20value%20is%20set%20to%20the%20path%20before%0A%20%20%20%20%20%20%20*%20%20%20enqueuing%20the%20pending%20property%20change.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%2Fpath%20was%20enqueued%20in%0A%20%20%20%20%20%20%20*%20%20%20the%20pending%20changes%20bag.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingPropertyOrPath'%2Cvalue%3Afunction%20_setPendingPropertyOrPath(path%2Cvalue%2CshouldNotify%2CisPathNotification)%7Bif(isPathNotification%7C%7CPolymer.Path.root(Array.isArray(path)%3Fpath%5B0%5D%3Apath)!%3D%3Dpath)%7B%2F%2F%20Dirty%20check%20changes%20being%20set%20to%20a%20path%20against%20the%20actual%20object%2C%0A%2F%2F%20since%20this%20is%20the%20entry%20point%20for%20paths%20into%20the%20system%3B%20from%20here%0A%2F%2F%20the%20only%20dirty%20checks%20are%20against%20the%20%60__dataTemp%60%20cache%20to%20prevent%0A%2F%2F%20duplicate%20work%20in%20the%20same%20turn%20only.%20Note%2C%20if%20this%20was%20a%20notification%0A%2F%2F%20of%20a%20change%20already%20set%20to%20a%20path%20(isPathNotification%3A%20true)%2C%0A%2F%2F%20we%20always%20let%20the%20change%20through%20and%20skip%20the%20%60set%60%20since%20it%20was%0A%2F%2F%20already%20dirty%20checked%20at%20the%20point%20of%20entry%20and%20the%20underlying%0A%2F%2F%20object%20has%20already%20been%20updated%0Aif(!isPathNotification)%7Bvar%20old%3DPolymer.Path.get(this%2Cpath)%3Bpath%3D%2F**%20%40type%20%7Bstring%7D%20*%2FPolymer.Path.set(this%2Cpath%2Cvalue)%3B%2F%2F%20Use%20property-accessor's%20simpler%20dirty%20check%0Aif(!path%7C%7C!_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_shouldPropertyChange'%2Cthis).call(this%2Cpath%2Cvalue%2Cold))%7Breturn%20false%3B%7D%7Dthis.__dataHasPaths%3Dtrue%3Bif(this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify))%7BcomputeLinkedPaths(this%2Cpath%2Cvalue)%3Breturn%20true%3B%7D%7Delse%7Bif(this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bpath%5D)%7Breturn%20this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify)%3B%7Delse%7Bthis%5Bpath%5D%3Dvalue%3B%7D%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Applies%20a%20value%20to%20a%20non-Polymer%20element%2Fnode's%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20implementation%20makes%20a%20best-effort%20at%20binding%20interop%3A%0A%20%20%20%20%20%20%20*%20Some%20native%20element%20properties%20have%20side-effects%20when%0A%20%20%20%20%20%20%20*%20re-setting%20the%20same%20value%20(e.g.%20setting%20%60%3Cinput%3E.value%60%20resets%20the%0A%20%20%20%20%20%20%20*%20cursor%20position)%2C%20so%20we%20do%20a%20dirty-check%20before%20setting%20the%20value.%0A%20%20%20%20%20%20%20*%20However%2C%20for%20better%20interop%20with%20non-Polymer%20custom%20elements%20that%0A%20%20%20%20%20%20%20*%20accept%20objects%2C%20we%20explicitly%20re-set%20object%20changes%20coming%20from%20the%0A%20%20%20%20%20%20%20*%20Polymer%20world%20(which%20may%20include%20deep%20object%20changes%20without%20the%0A%20%20%20%20%20%20%20*%20top%20reference%20changing)%2C%20erring%20on%20the%20side%20of%20providing%20more%0A%20%20%20%20%20%20%20*%20information.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20provide%20alternate%20approaches.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7B%2F%2F%20It%20is%20a%20judgment%20call%20that%20resetting%20primitives%20is%0A%2F%2F%20%22bad%22%20and%20resettings%20objects%20is%20also%20%22good%22%3B%20alternatively%20we%20could%0A%2F%2F%20implement%20a%20whitelist%20of%20tag%20%26%20property%20values%20that%20should%20never%0A%2F%2F%20be%20reset%20(e.g.%20%3Cinput%3E.value%20%26%26%20%3Cselect%3E.value)%0Aif(value!%3D%3Dnode%5Bprop%5D%7C%7C(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D'object')%7Bnode%5Bprop%5D%3Dvalue%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20%60PropertiesChanged%60%20implementation%20to%20introduce%20special%0A%20%20%20%20%20%20%20*%20dirty%20check%20logic%20depending%20on%20the%20property%20%26%20value%20being%20set%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20Any%20value%20set%20to%20a%20path%20(e.g.%20'obj.prop'%3A%2042%20or%20'obj.prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%2C%20dirty%20checked%20against%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%202.%20Object%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%20and%20%60__data%60%2C%20dirty%20checked%20against%0A%20%20%20%20%20%20%20*%20%20%20%20%60__dataTemp%60%20by%20default%20implementation%20of%20%60_shouldPropertyChange%60%0A%20%20%20%20%20%20%20*%203.%20Primitive%20value%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%2042)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__data%60%2C%20dirty%20checked%20against%20%60__data%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20dirty-check%20is%20important%20to%20prevent%20cycles%20due%20to%20two-way%0A%20%20%20%20%20%20%20*%20notification%2C%20but%20paths%20and%20objects%20are%20only%20dirty%20checked%20against%20any%0A%20%20%20%20%20%20%20*%20previous%20value%20set%20during%20this%20turn%20via%20a%20%22temporary%20cache%22%20that%20is%0A%20%20%20%20%20%20%20*%20cleared%20when%20the%20last%20%60_propertiesChanged%60%20exits.%20This%20is%20so%3A%0A%20%20%20%20%20%20%20*%20a.%20any%20cached%20array%20paths%20(e.g.%20'array.3.prop')%20may%20be%20invalidated%0A%20%20%20%20%20%20%20*%20%20%20%20due%20to%20array%20mutations%20like%20shift%2Funshift%2Fsplice%3B%20this%20is%20fine%0A%20%20%20%20%20%20%20*%20%20%20%20since%20path%20changes%20are%20dirty-checked%20at%20user%20entry%20points%20like%20%60set%60%0A%20%20%20%20%20%20%20*%20b.%20dirty-checking%20for%20objects%20only%20lasts%20one%20turn%20to%20allow%20the%20user%0A%20%20%20%20%20%20%20*%20%20%20%20to%20mutate%20the%20object%20in-place%20and%20re-set%20it%20with%20the%20same%20identity%0A%20%20%20%20%20%20%20*%20%20%20%20and%20have%20all%20sub-properties%20re-propagated%20in%20a%20subsequent%20turn.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20temp%20cache%20is%20not%20necessarily%20sufficient%20to%20prevent%20invalid%20array%0A%20%20%20%20%20%20%20*%20paths%2C%20since%20a%20splice%20can%20happen%20during%20the%20same%20turn%20(with%20pathological%0A%20%20%20%20%20%20%20*%20user%20code)%3B%20we%20could%20introduce%20a%20%22fixup%22%20for%20temporarily%20cached%20array%0A%20%20%20%20%20%20%20*%20paths%20if%20needed%3A%20https%3A%2F%2Fgithub.com%2FPolymer%2Fpolymer%2Fissues%2F4227%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20True%20if%20property%20should%20fire%20notification%0A%20%20%20%20%20%20%20*%20%20%20event%20(applies%20only%20for%20%60notify%3A%20true%60%20properties)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2CshouldNotify)%7Bvar%20isPath%3Dthis.__dataHasPaths%26%26Polymer.Path.isPath(property)%3Bvar%20prevProps%3DisPath%3Fthis.__dataTemp%3Athis.__data%3Bif(this._shouldPropertyChange(property%2Cvalue%2CprevProps%5Bproperty%5D))%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dthis.__data%5Bproperty%5D%3B%7D%2F%2F%20Paths%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%20turn)%2C%0A%2F%2F%20which%20is%20used%20for%20dirty-checking%2C%20all%20others%20stored%20in%20__data%0Aif(isPath)%7Bthis.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Delse%7Bthis.__data%5Bproperty%5D%3Dvalue%3B%7D%2F%2F%20All%20changes%20go%20into%20pending%20property%20bag%2C%20passed%20to%20_propertiesChanged%0Athis.__dataPending%5Bproperty%5D%3Dvalue%3B%2F%2F%20Track%20properties%20that%20should%20notify%20separately%0Aif(isPath%7C%7Cthis%5BTYPES.NOTIFY%5D%26%26this%5BTYPES.NOTIFY%5D%5Bproperty%5D)%7Bthis.__dataToNotify%3Dthis.__dataToNotify%7C%7C%7B%7D%3Bthis.__dataToNotify%5Bproperty%5D%3DshouldNotify%3B%7Dreturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20base%20implementation%20to%20ensure%20all%20accessors%20set%20%60shouldNotify%60%0A%20%20%20%20%20%20%20*%20to%20true%2C%20for%20per-property%20notification%20tracking.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessor%60's%20default%20async%20queuing%20of%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%3A%20if%20%60__dataReady%60%20is%20false%20(has%20not%20yet%20been%0A%20%20%20%20%20%20%20*%20manually%20flushed)%2C%20the%20function%20no-ops%3B%20otherwise%20flushes%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20synchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bif(this.__dataReady)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20the%20given%20client%20on%20a%20list%20of%20pending%20clients%2C%20whose%0A%20%20%20%20%20%20%20*%20pending%20property%20changes%20can%20later%20be%20flushed%20via%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60_flushClients%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20client%20PropertyEffects%20client%20to%20enqueue%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enqueueClient'%2Cvalue%3Afunction%20_enqueueClient(client)%7Bthis.__dataPendingClients%3Dthis.__dataPendingClients%7C%7C%5B%5D%3Bif(client!%3D%3Dthis)%7Bthis.__dataPendingClients.push(client)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20superclass%20implementation.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bthis.__dataCounter%2B%2B%3B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_flushProperties'%2Cthis).call(this)%3Bthis.__dataCounter--%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Flushes%20any%20clients%20previously%20enqueued%20via%20%60_enqueueClient%60%2C%20causing%0A%20%20%20%20%20%20%20*%20their%20%60_flushProperties%60%20method%20to%20run.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushClients'%2Cvalue%3Afunction%20_flushClients()%7Bif(!this.__dataClientsReady)%7Bthis.__dataClientsReady%3Dtrue%3Bthis._readyClients()%3B%2F%2F%20Override%20point%20where%20accessors%20are%20turned%20on%3B%20importantly%2C%0A%2F%2F%20this%20is%20after%20clients%20have%20fully%20readied%2C%20providing%20a%20guarantee%0A%2F%2F%20that%20any%20property%20effects%20occur%20only%20after%20all%20clients%20are%20ready.%0Athis.__dataReady%3Dtrue%3B%7Delse%7Bthis.__enableOrFlushClients()%3B%7D%7D%2F%2F%20NOTE%3A%20We%20ensure%20clients%20either%20enable%20or%20flush%20as%20appropriate.%20This%0A%2F%2F%20handles%20two%20corner%20cases%3A%0A%2F%2F%20(1)%20clients%20flush%20properly%20when%20connected%2Fenabled%20before%20the%20host%0A%2F%2F%20enables%3B%20e.g.%0A%2F%2F%20%20%20(a)%20Templatize%20stamps%20with%20no%20properties%20and%20does%20not%20flush%20and%0A%2F%2F%20%20%20(b)%20the%20instance%20is%20inserted%20into%20dom%20and%0A%2F%2F%20%20%20(c)%20then%20the%20instance%20flushes.%0A%2F%2F%20(2)%20clients%20enable%20properly%20when%20not%20connected%2Fenabled%20when%20the%20host%0A%2F%2F%20flushes%3B%20e.g.%0A%2F%2F%20%20%20(a)%20a%20template%20is%20runtime%20stamped%20and%20not%20yet%20connected%2Fenabled%0A%2F%2F%20%20%20(b)%20a%20host%20sets%20a%20property%2C%20causing%20stamped%20dom%20to%20flush%0A%2F%2F%20%20%20(c)%20the%20stamped%20dom%20enables.%0A%7D%2C%7Bkey%3A'__enableOrFlushClients'%2Cvalue%3Afunction%20__enableOrFlushClients()%7Bvar%20clients%3Dthis.__dataPendingClients%3Bif(clients)%7Bthis.__dataPendingClients%3Dnull%3Bfor(var%20i%3D0%3Bi%3Cclients.length%3Bi%2B%2B)%7Bvar%20client%3Dclients%5Bi%5D%3Bif(!client.__dataEnabled)%7Bclient._enableProperties()%3B%7Delse%20if(client.__dataPending)%7Bclient._flushProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Perform%20any%20initial%20setup%20on%20client%20dom.%20Called%20before%20the%20first%0A%20%20%20%20%20%20%20*%20%60_flushProperties%60%20call%20on%20client%20dom%20and%20before%20any%20element%0A%20%20%20%20%20%20%20*%20observers%20are%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bthis.__enableOrFlushClients()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20bag%20of%20property%20changes%20to%20this%20instance%2C%20and%0A%20%20%20%20%20%20%20*%20synchronously%20processes%20all%20effects%20of%20the%20properties%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Property%20names%20must%20be%20simple%20properties%2C%20not%20paths.%20%20Batched%0A%20%20%20%20%20%20%20*%20path%20propagation%20is%20not%20supported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20one%20or%20more%20key-value%20pairs%20whose%20key%20is%0A%20%20%20%20%20%20%20*%20%20%20a%20property%20and%20value%20is%20the%20new%20value%20to%20set%20for%20that%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setReadOnly%20When%20true%2C%20any%20private%20values%20set%20in%0A%20%20%20%20%20%20%20*%20%20%20%60props%60%20will%20be%20set.%20By%20default%2C%20%60setProperties%60%20will%20not%20set%0A%20%20%20%20%20%20%20*%20%20%20%60readOnly%3A%20true%60%20root%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setProperties'%2Cvalue%3Afunction%20setProperties(props%2CsetReadOnly)%7Bfor(var%20path%20in%20props)%7Bif(setReadOnly%7C%7C!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5Bpath%5D)%7B%2F%2FTODO(kschaaf)%3A%20explicitly%20disallow%20paths%20in%20setProperty%3F%0A%2F%2F%20wildcard%20observers%20currently%20only%20pass%20the%20first%20changed%20path%0A%2F%2F%20in%20the%20%60info%60%20object%2C%20and%20you%20could%20do%20some%20odd%20things%20batching%0A%2F%2F%20paths%2C%20e.g.%20%7B'foo.bar'%3A%20%7B...%7D%2C%20'foo'%3A%20null%7D%0Athis._setPendingPropertyOrPath(path%2Cprops%5Bpath%5D%2Ctrue)%3B%7D%7Dthis._invalidateProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20so%20that%20property%20accessor%0A%20%20%20%20%20%20%20*%20side%20effects%20are%20not%20enabled%20until%20after%20client%20dom%20is%20fully%20ready.%0A%20%20%20%20%20%20%20*%20Also%20calls%20%60_flushClients%60%20callback%20to%20ensure%20client%20dom%20is%20enabled%0A%20%20%20%20%20%20%20*%20that%20was%20not%20enabled%20as%20a%20result%20of%20flushing%20properties.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B%2F%2F%20It%20is%20important%20that%20%60super.ready()%60%20is%20not%20called%20here%20as%20it%0A%2F%2F%20immediately%20turns%20on%20accessors.%20Instead%2C%20we%20wait%20until%20%60readyClients%60%0A%2F%2F%20to%20enable%20accessors%20to%20provide%20a%20guarantee%20that%20clients%20are%20ready%0A%2F%2F%20before%20processing%20any%20accessors%20side%20effects.%0Athis._flushProperties()%3B%2F%2F%20If%20no%20data%20was%20pending%2C%20%60_flushProperties%60%20will%20not%20%60flushClients%60%0A%2F%2F%20so%20ensure%20this%20is%20done.%0Aif(!this.__dataClientsReady)%7Bthis._flushClients()%3B%7D%2F%2F%20Before%20ready%2C%20client%20notifications%20do%20not%20trigger%20_flushProperties.%0A%2F%2F%20Therefore%20a%20flush%20is%20necessary%20here%20if%20data%20has%20been%20set.%0Aif(this.__dataPending)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyAccessors%60's%20properties%20changed%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Runs%20each%20class%20of%20effects%20for%20the%20batch%20of%20changed%20properties%20in%0A%20%20%20%20%20%20%20*%20a%20specific%20order%20(compute%2C%20propagate%2C%20reflect%2C%20observe%2C%20notify).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20----------------------------%0A%2F%2F%20let%20c%20%3D%20Object.getOwnPropertyNames(changedProps%20%7C%7C%20%7B%7D)%3B%0A%2F%2F%20window.debug%20%26%26%20console.group(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20if%20(window.debug)%20%7B%20debugger%3B%20%7D%0A%2F%2F%20----------------------------%0Avar%20hasPaths%3Dthis.__dataHasPaths%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20Compute%20properties%0ArunComputedEffects(this%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Clear%20notify%20properties%20prior%20to%20possible%20reentry%20(propagate%2C%20observe)%2C%0A%2F%2F%20but%20after%20computing%20effects%20have%20a%20chance%20to%20add%20to%20them%0Avar%20notifyProps%3Dthis.__dataToNotify%3Bthis.__dataToNotify%3Dnull%3B%2F%2F%20Propagate%20properties%20to%20clients%0Athis._propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Flush%20clients%0Athis._flushClients()%3B%2F%2F%20Reflect%20properties%0ArunEffects(this%2Cthis%5BTYPES.REFLECT%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Observe%20properties%0ArunEffects(this%2Cthis%5BTYPES.OBSERVE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Notify%20properties%20to%20host%0Aif(notifyProps)%7BrunNotifyEffects(this%2CnotifyProps%2CchangedProps%2ColdProps%2ChasPaths)%3B%7D%2F%2F%20Clear%20temporary%20cache%20at%20end%20of%20turn%0Aif(this.__dataCounter%3D%3D1)%7Bthis.__dataTemp%3D%7B%7D%3B%7D%2F%2F%20----------------------------%0A%2F%2F%20window.debug%20%26%26%20console.groupEnd(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20----------------------------%0A%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20propagate%20any%20property%20changes%20to%20stamped%20template%20nodes%0A%20%20%20%20%20%20%20*%20managed%20by%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propagatePropertyChanges'%2Cvalue%3Afunction%20_propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%7Bif(this%5BTYPES.PROPAGATE%5D)%7BrunEffects(this%2Cthis%5BTYPES.PROPAGATE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%7Dvar%20templateInfo%3Dthis.__templateInfo%3Bwhile(templateInfo)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2CchangedProps%2ColdProps%2ChasPaths%2CtemplateInfo.nodeList)%3BtemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Aliases%20one%20data%20path%20as%20another%2C%20such%20that%20path%20notifications%20from%20one%0A%20%20%20%20%20%20%20*%20are%20routed%20to%20the%20other.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20to%20Target%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20from%20Source%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'linkPaths'%2Cvalue%3Afunction%20linkPaths(to%2Cfrom)%7Bto%3DPolymer.Path.normalize(to)%3Bfrom%3DPolymer.Path.normalize(from)%3Bthis.__dataLinkedPaths%3Dthis.__dataLinkedPaths%7C%7C%7B%7D%3Bthis.__dataLinkedPaths%5Bto%5D%3Dfrom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20a%20data%20path%20alias%20previously%20established%20with%20%60_linkPaths%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20the%20path%20to%20unlink%20should%20be%20the%20target%20(%60to%60)%20used%20when%0A%20%20%20%20%20%20%20*%20linking%20the%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Target%20path%20to%20unlink.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlinkPaths'%2Cvalue%3Afunction%20unlinkPaths(path)%7Bpath%3DPolymer.Path.normalize(path)%3Bif(this.__dataLinkedPaths)%7Bdelete%20this.__dataLinkedPaths%5Bpath%5D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20an%20array%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items%20%3D%20%5B%20%7Bname%3A%20'Jim'%7D%2C%20%7Bname%3A%20'Todd'%7D%2C%20%7Bname%3A%20'Bill'%7D%20%5D%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.splice(1%2C%201%2C%20%7Bname%3A%20'Sam'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.push(%7Bname%3A%20'Bob'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifySplices('items'%2C%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%201%2C%20removed%3A%20%5B%7Bname%3A%20'Todd'%7D%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%203%2C%20removed%3A%20%5B%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D)%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%20indicating%20ordered%0A%20%20%20%20%20%20%20*%20%20%20changes%20that%20occurred%20to%20the%20array.%20Each%20record%20should%20have%20the%0A%20%20%20%20%20%20%20*%20%20%20following%20fields%3A%0A%20%20%20%20%20%20%20*%20%20%20%20*%20index%3A%20index%20at%20which%20the%20change%20occurred%0A%20%20%20%20%20%20%20*%20%20%20%20*%20removed%3A%20array%20of%20items%20that%20were%20removed%20from%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20addedCount%3A%20number%20of%20new%20items%20added%20at%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20object%3A%20a%20reference%20to%20the%20array%20in%20question%0A%20%20%20%20%20%20%20*%20%20%20%20*%20type%3A%20the%20string%20literal%20'splice'%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20Note%20that%20splice%20records%20_must_%20be%20normalized%20such%20that%20they%20are%0A%20%20%20%20%20%20%20*%20%20%20reported%20in%20index%20order%20(raw%20results%20from%20%60Object.observe%60%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20ordered%20and%20must%20be%20normalized%2Fmerged%20before%20notifying).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifySplices'%2Cvalue%3Afunction%20notifySplices(path%2Csplices)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B_notifySplices(this%2Carray%2Cinfo.path%2Csplices)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20reading%20a%20value%20from%20a%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20is%20undefined%2C%20this%20method%20returns%0A%20%20%20%20%20%20%20*%20%60undefined%60%20(this%20method%20does%20not%20throw%20when%20dereferencing%20undefined%0A%20%20%20%20%20%20%20*%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20read.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60foo.bar.baz%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60users.12.name%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20the%20path%2C%20or%20%60undefined%60%20if%20any%20part%20of%20the%20path%0A%20%20%20%20%20%20%20*%20%20%20is%20undefined.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'get'%2Cvalue%3Afunction%20get(path%2Croot)%7Breturn%20Polymer.Path.get(root%7C%7Cthis%2Cpath)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20setting%20a%20value%20to%20a%20path%20and%20notifying%20any%0A%20%20%20%20%20%20%20*%20elements%20bound%20to%20the%20same%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20except%20for%20the%20last%20is%20undefined%2C%0A%20%20%20%20%20%20%20*%20this%20method%20does%20nothing%20(this%20method%20does%20not%20throw%20when%0A%20%20%20%20%20%20%20*%20dereferencing%20undefined%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20write.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60'foo.bar.baz'%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60'users.12.name'%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20at%20the%20specified%20path.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%20%20When%20specified%2C%20no%20notification%20will%20occur.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'set'%2Cvalue%3Afunction%20set(path%2Cvalue%2Croot)%7Bif(root)%7BPolymer.Path.set(root%2Cpath%2Cvalue)%3B%7Delse%7Bif(!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5B%2F**%20%40type%20%7Bstring%7D%20*%2Fpath%5D)%7Bif(this._setPendingPropertyOrPath(path%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20end%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20push%20onto%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'push'%2Cvalue%3Afunction%20push(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20len%3Darray.length%3Bfor(var%20_len%3Darguments.length%2Citems%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bitems%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dvar%20ret%3Darray.push.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Clen%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20end%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'pop'%2Cvalue%3Afunction%20pop(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.pop()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2Carray.length%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Starting%20from%20the%20start%20index%20specified%2C%20removes%200%20or%20more%20items%0A%20%20%20%20%20%20%20*%20from%20the%20array%20and%20inserts%200%20or%20more%20new%20items%20in%20their%20place.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.splice%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20start%20Index%20from%20which%20to%20start%20removing%2Finserting.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20deleteCount%20Number%20of%20items%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20into%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20of%20removed%20items.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'splice'%2Cvalue%3Afunction%20splice(path%2Cstart%2CdeleteCount)%7Bfor(var%20_len2%3Darguments.length%2Citems%3DArray(_len2%3E3%3F_len2-3%3A0)%2C_key2%3D3%3B_key2%3C_len2%3B_key2%2B%2B)%7Bitems%5B_key2-3%5D%3Darguments%5B_key2%5D%3B%7Dvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B%2F%2F%20Normalize%20fancy%20native%20splice%20handling%20of%20crazy%20start%20values%0Aif(start%3C0)%7Bstart%3Darray.length-Math.floor(-start)%3B%7Delse%20if(start)%7Bstart%3DMath.floor(start)%3B%7D%2F%2F%20array.splice%20does%20different%20things%20based%20on%20the%20number%20of%20arguments%0A%2F%2F%20you%20pass%20in.%20Therefore%2C%20array.splice(0)%20and%20array.splice(0%2C%20undefined)%0A%2F%2F%20do%20different%20things.%20In%20the%20former%2C%20the%20whole%20array%20is%20cleared.%20In%20the%0A%2F%2F%20latter%2C%20no%20items%20are%20removed.%0A%2F%2F%20This%20means%20that%20we%20need%20to%20detect%20whether%201.%20one%20of%20the%20arguments%0A%2F%2F%20is%20actually%20passed%20in%20and%20then%202.%20determine%20how%20many%20arguments%0A%2F%2F%20we%20should%20pass%20on%20to%20the%20native%20array.splice%0A%2F%2F%0Avar%20ret%3Dvoid%200%3B%2F%2F%20Omit%20any%20additional%20arguments%20if%20they%20were%20not%20passed%20in%0Aif(arguments.length%3D%3D%3D2)%7Bret%3Darray.splice(start)%3B%2F%2F%20Either%20start%20was%20undefined%20and%20the%20others%20were%20defined%2C%20but%20in%20this%0A%2F%2F%20case%20we%20can%20safely%20pass%20on%20all%20arguments%0A%2F%2F%0A%2F%2F%20Note%3A%20this%20includes%20the%20case%20where%20none%20of%20the%20arguments%20were%20passed%20in%2C%0A%2F%2F%20e.g.%20this.splice('array').%20However%2C%20if%20both%20start%20and%20deleteCount%0A%2F%2F%20are%20undefined%2C%20array.splice%20will%20not%20modify%20the%20array%20(as%20expected)%0A%7Delse%7Bret%3Darray.splice.apply(array%2C%5Bstart%2CdeleteCount%5D.concat(items))%3B%7D%2F%2F%20At%20the%20end%2C%20check%20whether%20any%20items%20were%20passed%20in%20(e.g.%20insertions)%0A%2F%2F%20or%20if%20the%20return%20array%20contains%20items%20(e.g.%20deletions).%0A%2F%2F%20Only%20notify%20if%20items%20were%20added%20or%20deleted.%0Aif(items.length%7C%7Cret.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Cstart%2Citems.length%2Cret)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20beginning%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'shift'%2Cvalue%3Afunction%20shift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.shift()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20beginning%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20info%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unshift'%2Cvalue%3Afunction%20unshift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bfor(var%20_len3%3Darguments.length%2Citems%3DArray(_len3%3E1%3F_len3-1%3A0)%2C_key3%3D1%3B_key3%3C_len3%3B_key3%2B%2B)%7Bitems%5B_key3-1%5D%3Darguments%5B_key3%5D%3B%7Dvar%20ret%3Darray.unshift.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20a%20path%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.item.user.name%20%3D%20'Bob'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifyPath('item.user.name')%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Value%20at%20the%20path%20(optional).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyPath'%2Cvalue%3Afunction%20notifyPath(path%2Cvalue)%7B%2F**%20%40type%20%7Bstring%7D%20*%2Fvar%20propPath%3Dvoid%200%3Bif(arguments.length%3D%3D1)%7B%2F%2F%20Get%20value%20if%20not%20supplied%0Avar%20info%3D%7Bpath%3A''%7D%3Bvalue%3DPolymer.Path.get(this%2Cpath%2Cinfo)%3BpropPath%3Dinfo.path%3B%7Delse%20if(Array.isArray(path))%7B%2F%2F%20Normalize%20path%20if%20needed%0ApropPath%3DPolymer.Path.normalize(path)%3B%7Delse%7BpropPath%3D%2F**%20%40type%7Bstring%7D%20*%2Fpath%3B%7Dif(this._setPendingPropertyOrPath(propPath%2Cvalue%2Ctrue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReadOnlyProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReadOnlyProperty'%2Cvalue%3Afunction%20_createReadOnlyProperty(property%2CprotectedSetter)%7Bthis._addPropertyEffect(property%2CTYPES.READ_ONLY)%3Bif(protectedSetter)%7Bthis%5B'_set'%2Bupper(property)%5D%3D%2F**%20%40this%20%7BPropertyEffects%7D%20*%2Ffunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createPropertyObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createPropertyObserver'%2Cvalue%3Afunction%20_createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bvar%20info%3D%7Bproperty%3Aproperty%2Cmethod%3Amethod%2CdynamicFn%3ABoolean(dynamicFn)%7D%3Bthis._addPropertyEffect(property%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Aproperty%7D%7D)%3Bif(dynamicFn)%7Bthis._addPropertyEffect(%2F**%20%40type%20%7Bstring%7D%20*%2Fmethod%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Amethod%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createMethodObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createMethodObserver'%2Cvalue%3Afunction%20_createMethodObserver(expression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20observer%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.OBSERVE%2CrunMethodEffect%2Cnull%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createNotifyingProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createNotifyingProperty'%2Cvalue%3Afunction%20_createNotifyingProperty(property)%7Bthis._addPropertyEffect(property%2CTYPES.NOTIFY%2C%7Bfn%3ArunNotifyEffect%2Cinfo%3A%7BeventName%3ACaseMap.camelToDashCase(property)%2B'-changed'%2Cproperty%3Aproperty%7D%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReflectedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReflectedProperty'%2Cvalue%3Afunction%20_createReflectedProperty(property)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bif(attr%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Property%20'%2Bproperty%2B'%20cannot%20be%20reflected%20to%20attribute%20'%2Battr%2B'%20because%20%22-%22%20is%20not%20a%20valid%20starting%20attribute%20name.%20Use%20a%20lowercase%20first%20letter%20for%20the%20property%20instead.')%3B%7Delse%7Bthis._addPropertyEffect(property%2CTYPES.REFLECT%2C%7Bfn%3ArunReflectEffect%2Cinfo%3A%7BattrName%3Aattr%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createComputedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createComputedProperty'%2Cvalue%3Afunction%20_createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20computed%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.COMPUTE%2CrunComputedEffect%2Cproperty%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20the%20argument%20values%20for%20a%20method%20specified%20in%20the%20provided%20array%0A%20%20%20%20%20%20%20*%20of%20argument%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60path%60%20and%20%60value%60%20arguments%20are%20used%20to%20fill%20in%20wildcard%20descriptor%0A%20%20%20%20%20%20%20*%20when%20the%20method%20is%20being%20called%20as%20a%20result%20of%20a%20path%20notification.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Array%3C!MethodArg%3E%7D%20args%20Array%20of%20argument%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20name%20that%20triggered%20the%20method%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C*%3E%7D%20Array%20of%20argument%20values%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_marshalArgs'%2Cvalue%3Afunction%20_marshalArgs(args%2Cpath%2Cprops)%7Bvar%20data%3Dthis.__data%3Bvar%20values%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dargs.length%3Bi%3Cl%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bvar%20name%3Darg.name%3Bvar%20v%3Dvoid%200%3Bif(arg.literal)%7Bv%3Darg.value%3B%7Delse%7Bif(arg.structured)%7Bv%3DPolymer.Path.get(data%2Cname)%3B%2F%2F%20when%20data%20is%20not%20stored%20e.g.%20%60splices%60%0Aif(v%3D%3D%3Dundefined)%7Bv%3Dprops%5Bname%5D%3B%7D%7Delse%7Bv%3Ddata%5Bname%5D%3B%7D%7Dif(arg.wildcard)%7B%2F%2F%20Only%20send%20the%20actual%20path%20changed%20info%20if%20the%20change%20that%0A%2F%2F%20caused%20the%20observer%20to%20run%20matched%20the%20wildcard%0Avar%20baseChanged%3Dname.indexOf(path%2B'.')%3D%3D%3D0%3Bvar%20matches%3Dpath.indexOf(name)%3D%3D%3D0%26%26!baseChanged%3Bvalues%5Bi%5D%3D%7Bpath%3Amatches%3Fpath%3Aname%2Cvalue%3Amatches%3Fprops%5Bpath%5D%3Av%2Cbase%3Av%7D%3B%7Delse%7Bvalues%5Bi%5D%3Dv%3B%7D%7Dreturn%20values%3B%7D%2F%2F%20--%20static%20class%20methods%20------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20accessor%20exists%20for%20the%20specified%20property%2C%20and%20adds%0A%20%20%20%20%20%20%20*%20to%20a%20list%20of%20%22property%20effects%22%20that%20will%20run%20when%20the%20accessor%20for%0A%20%20%20%20%20%20%20*%20the%20specified%20property%20is%20set.%20%20Effects%20are%20grouped%20by%20%22type%22%2C%20which%0A%20%20%20%20%20%20%20*%20roughly%20corresponds%20to%20a%20phase%20in%20effect%20processing.%20%20The%20effect%0A%20%20%20%20%20%20%20*%20metadata%20should%20be%20in%20the%20following%20form%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20fn%3A%20effectFunction%2C%20%2F%2F%20Reference%20to%20function%20to%20call%20to%20perform%20effect%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20info%3A%20%7B%20...%20%7D%20%20%20%20%20%20%20%2F%2F%20Effect%20metadata%20passed%20to%20function%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20trigger%3A%20%7B%20%20%20%20%20%20%20%20%20%20%2F%2F%20Optional%20triggering%20metadata%3B%20if%20not%20provided%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20name%3A%20string%20%20%20%20%20%20%2F%2F%20the%20property%20is%20treated%20as%20a%20wildcard%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20structured%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20wildcard%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effects%20are%20called%20from%20%60_propertiesChanged%60%20in%20the%20following%20order%20by%0A%20%20%20%20%20%20%20*%20type%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20COMPUTE%0A%20%20%20%20%20%20%20*%202.%20PROPAGATE%0A%20%20%20%20%20%20%20*%203.%20REFLECT%0A%20%20%20%20%20%20%20*%204.%20OBSERVE%0A%20%20%20%20%20%20%20*%205.%20NOTIFY%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effect%20functions%20are%20called%20with%20the%20following%20signature%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20effectFunction(inst%2C%20path%2C%20props%2C%20oldProps%2C%20info%2C%20hasPaths)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_bindTemplate'%2C%2F%2F%20--%20binding%20----------------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60bindTemplate%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20the%20prototype%20(for%20prototypical%20template%0A%20%20%20%20%20%20%20*%20binding%2C%20to%20avoid%20creating%20accessors%20every%20instance)%20once%20per%20prototype%2C%0A%20%20%20%20%20%20%20*%20and%20will%20be%20called%20with%20%60runtimeBinding%3A%20true%60%20by%20%60_stampTemplate%60%20to%0A%20%20%20%20%20%20%20*%20create%20and%20link%20an%20instance%20of%20the%20template%20metadata%20associated%20with%20a%0A%20%20%20%20%20%20%20*%20particular%20stamping.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20instanceBinding%20When%20false%20(default)%2C%20performs%0A%20%20%20%20%20%20%20*%20%20%20%22prototypical%22%20binding%20of%20the%20template%20and%20overwrites%20any%20previously%0A%20%20%20%20%20%20%20*%20%20%20bound%20template%20for%20the%20class.%20When%20true%20(as%20passed%20from%0A%20%20%20%20%20%20%20*%20%20%20%60_stampTemplate%60)%2C%20the%20template%20info%20is%20instanced%20and%20linked%20into%0A%20%20%20%20%20%20%20*%20%20%20the%20list%20of%20bound%20templates.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%3B%20for%20%60runtimeBinding%60%2C%0A%20%20%20%20%20%20%20*%20%20%20this%20is%20an%20instance%20of%20the%20prototypical%20template%20info%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_bindTemplate(template%2CinstanceBinding)%7Bvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20wasPreBound%3Dthis.__templateInfo%3D%3DtemplateInfo%3B%2F%2F%20Optimization%3A%20since%20this%20is%20called%20twice%20for%20proto-bound%20templates%2C%0A%2F%2F%20don't%20attempt%20to%20recreate%20accessors%20if%20this%20template%20was%20pre-bound%0Aif(!wasPreBound)%7Bfor(var%20prop%20in%20templateInfo.propertyEffects)%7Bthis._createPropertyAccessor(prop)%3B%7D%7Dif(instanceBinding)%7B%2F%2F%20For%20instance-time%20binding%2C%20create%20instance%20of%20template%20metadata%0A%2F%2F%20and%20link%20into%20list%20of%20templates%20if%20necessary%0AtemplateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2FObject.create(templateInfo)%3BtemplateInfo.wasPreBound%3DwasPreBound%3Bif(!wasPreBound%26%26this.__templateInfo)%7Bvar%20last%3Dthis.__templateInfoLast%7C%7Cthis.__templateInfo%3Bthis.__templateInfoLast%3Dlast.nextTemplateInfo%3DtemplateInfo%3BtemplateInfo.previousTemplateInfo%3Dlast%3Breturn%20templateInfo%3B%7D%7Dreturn%20this.__templateInfo%3DtemplateInfo%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20a%20property%20effect%20to%20the%20given%20template%20metadata%2C%20which%20is%20run%0A%20%20%20%20%20%20%20*%20at%20the%20%22propagate%22%20stage%20of%20%60_propertiesChanged%60%20when%20the%20template%0A%20%20%20%20%20%20%20*%20has%20been%20bound%20to%20the%20element%20via%20%60_bindTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60effect%60%20object%20should%20match%20the%20format%20in%20%60_addPropertyEffect%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Template%20metadata%20to%20add%20effect%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20provided%20template%20and%20performs%20instance-time%20setup%20for%0A%20%20%20%20%20%20%20*%20Polymer%20template%20features%2C%20including%20data%20bindings%2C%20declarative%20event%0A%20%20%20%20%20%20%20*%20listeners%2C%20and%20the%20%60this.%24%60%20map%20of%20%60id%60's%20to%20nodes.%20%20A%20document%20fragment%0A%20%20%20%20%20%20%20*%20is%20returned%20containing%20the%20stamped%20DOM%2C%20ready%20for%20insertion%20into%20the%0A%20%20%20%20%20%20%20*%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20more%20than%20once%3B%20however%20note%20that%20due%20to%0A%20%20%20%20%20%20%20*%20%60shadycss%60%20polyfill%20limitations%2C%20only%20styles%20from%20templates%20prepared%0A%20%20%20%20%20%20%20*%20using%20%60ShadyCSS.prepareTemplate%60%20will%20be%20correctly%20polyfilled%20(scoped%0A%20%20%20%20%20%20%20*%20to%20the%20shadow%20root%20and%20support%20CSS%20custom%20properties)%2C%20and%20note%20that%0A%20%20%20%20%20%20%20*%20%60ShadyCSS.prepareTemplate%60%20may%20only%20be%20called%20once%20per%20element.%20As%20such%2C%0A%20%20%20%20%20%20%20*%20any%20styles%20required%20by%20in%20runtime-stamped%20templates%20must%20be%20included%0A%20%20%20%20%20%20%20*%20in%20the%20main%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Ensures%20that%20created%20dom%20is%20%60_enqueueClient%60'd%20to%20this%20element%20so%0A%2F%2F%20that%20it%20can%20be%20flushed%20on%20next%20call%20to%20%60_flushProperties%60%0AhostStack.beginHosting(this)%3Bvar%20dom%3D_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_stampTemplate'%2Cthis).call(this%2Ctemplate)%3BhostStack.endHosting(this)%3Bvar%20templateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2Fthis._bindTemplate(template%2Ctrue)%3B%2F%2F%20Add%20template-instance-specific%20data%20to%20instanced%20templateInfo%0AtemplateInfo.nodeList%3Ddom.nodeList%3B%2F%2F%20Capture%20child%20nodes%20to%20allow%20unstamping%20of%20non-prototypical%20templates%0Aif(!templateInfo.wasPreBound)%7Bvar%20nodes%3DtemplateInfo.childNodes%3D%5B%5D%3Bfor(var%20n%3Ddom.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bnodes.push(n)%3B%7D%7Ddom.templateInfo%3DtemplateInfo%3B%2F%2F%20Setup%20compound%20storage%2C%202-way%20listeners%2C%20and%20dataHost%20for%20bindings%0AsetupBindings(this%2CtemplateInfo)%3B%2F%2F%20Flush%20properties%20into%20template%20nodes%20if%20already%20booted%0Aif(this.__dataReady)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2Cthis.__data%2Cnull%2Cfalse%2CtemplateInfo.nodeList)%3B%7Dreturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20and%20unbinds%20the%20nodes%20previously%20contained%20in%20the%20provided%0A%20%20%20%20%20%20%20*%20DocumentFragment%20returned%20from%20%60_stampTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!StampedTemplate%7D%20dom%20DocumentFragment%20previously%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60_stampTemplate%60%20associated%20with%20the%20nodes%20to%20be%20removed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeBoundDom'%2Cvalue%3Afunction%20_removeBoundDom(dom)%7B%2F%2F%20Unlink%20template%20info%0Avar%20templateInfo%3Ddom.templateInfo%3Bif(templateInfo.previousTemplateInfo)%7BtemplateInfo.previousTemplateInfo.nextTemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7Dif(templateInfo.nextTemplateInfo)%7BtemplateInfo.nextTemplateInfo.previousTemplateInfo%3DtemplateInfo.previousTemplateInfo%3B%7Dif(this.__templateInfoLast%3D%3DtemplateInfo)%7Bthis.__templateInfoLast%3DtemplateInfo.previousTemplateInfo%3B%7DtemplateInfo.previousTemplateInfo%3DtemplateInfo.nextTemplateInfo%3Dnull%3B%2F%2F%20Remove%20stamped%20nodes%0Avar%20nodes%3DtemplateInfo.childNodes%3Bfor(var%20i%3D0%3Bi%3Cnodes.length%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3Bnode.parentNode.removeChild(node)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20%60TextNode%60's'%20%60textContent%60.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'PROPERTY_EFFECT_TYPES'%2Cget%3Afunction%20get()%7Breturn%20TYPES%3B%7D%7D%5D%2C%5B%7Bkey%3A'addPropertyEffect'%2Cvalue%3Afunction%20addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis.prototype._addPropertyEffect(property%2Ctype%2Ceffect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20single-property%20observer%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createPropertyObserver'%2Cvalue%3Afunction%20createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bthis.prototype._createPropertyObserver(property%2Cmethod%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20multi-property%20%22method%20observer%22%20based%20on%20the%20provided%0A%20%20%20%20%20%20%20*%20expression%2C%20which%20should%20be%20a%20string%20in%20the%20form%20of%20a%20normal%20JavaScript%0A%20%20%20%20%20%20%20*%20function%20signature%3A%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60.%20%20Each%20argument%0A%20%20%20%20%20%20%20*%20should%20correspond%20to%20a%20property%20or%20path%20in%20the%20context%20of%20this%0A%20%20%20%20%20%20%20*%20prototype%20(or%20instance)%2C%20or%20may%20be%20a%20literal%20string%20or%20number.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createMethodObserver'%2Cvalue%3Afunction%20createMethodObserver(expression%2CdynamicFn)%7Bthis.prototype._createMethodObserver(expression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20dispatch%20%60%3Cproperty%3E-changed%60%0A%20%20%20%20%20%20%20*%20events%20to%20notify%20of%20changes%20to%20the%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createNotifyingProperty'%2Cvalue%3Afunction%20createNotifyingProperty(property)%7Bthis.prototype._createNotifyingProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20read-only%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20To%20set%20the%20property%2C%20use%20the%20protected%20%60_setProperty%60%20API.%0A%20%20%20%20%20%20%20*%20To%20create%20a%20custom%20protected%20setter%20(e.g.%20%60_setMyProp()%60%20for%0A%20%20%20%20%20%20%20*%20property%20%60myProp%60)%2C%20pass%20%60true%60%20for%20%60protectedSetter%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20the%20property%20will%20have%20other%20property%20effects%2C%20this%20method%0A%20%20%20%20%20%20%20*%20should%20be%20called%20first%2C%20before%20adding%20other%20effects.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReadOnlyProperty'%2Cvalue%3Afunction%20createReadOnlyProperty(property%2CprotectedSetter)%7Bthis.prototype._createReadOnlyProperty(property%2CprotectedSetter)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20reflect%20the%20property%20value%0A%20%20%20%20%20%20%20*%20to%20a%20(dash-cased)%20attribute%20of%20the%20same%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReflectedProperty'%2Cvalue%3Afunction%20createReflectedProperty(property)%7Bthis.prototype._createReflectedProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20computed%20property%20whose%20value%20is%20set%20to%20the%20result%20of%20the%0A%20%20%20%20%20%20%20*%20method%20described%20by%20the%20given%20%60expression%60%20each%20time%20one%20or%20more%0A%20%20%20%20%20%20%20*%20arguments%20to%20the%20method%20changes.%20%20The%20expression%20should%20be%20a%20string%0A%20%20%20%20%20%20%20*%20in%20the%20form%20of%20a%20normal%20JavaScript%20function%20signature%3A%0A%20%20%20%20%20%20%20*%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20%20%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createComputedProperty'%2Cvalue%3Afunction%20createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bthis.prototype._createComputedProperty(property%2Cexpression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20the%20provided%20template%20to%20ensure%20binding%20effects%20are%20created%0A%20%20%20%20%20%20%20*%20for%20them%2C%20and%20then%20ensures%20property%20accessors%20are%20created%20for%20any%0A%20%20%20%20%20%20%20*%20dependent%20properties%20in%20the%20template.%20%20Binding%20effects%20for%20bound%0A%20%20%20%20%20%20%20*%20templates%20are%20stored%20in%20a%20linked%20list%20on%20the%20instance%20so%20that%0A%20%20%20%20%20%20%20*%20templates%20can%20be%20efficiently%20stamped%20and%20unstamped.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'bindTemplate'%2Cvalue%3Afunction%20bindTemplate(template)%7Breturn%20this.prototype._bindTemplate(template)%3B%7D%7D%2C%7Bkey%3A'_addTemplatePropertyEffect'%2Cvalue%3Afunction%20_addTemplatePropertyEffect(templateInfo%2Cprop%2Ceffect)%7Bvar%20hostProps%3DtemplateInfo.hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3BhostProps%5Bprop%5D%3Dtrue%3Bvar%20effects%3DtemplateInfo.propertyEffects%3DtemplateInfo.propertyEffects%7C%7C%7B%7D%3Bvar%20propEffects%3Deffects%5Bprop%5D%3Deffects%5Bprop%5D%7C%7C%5B%5D%3BpropEffects.push(effect)%3B%7D%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNode'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%20parts%3Dthis._parseBindings(node.textContent%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Initialize%20the%20textContent%20with%20any%20literal%20parts%0A%2F%2F%20NOTE%3A%20default%20to%20a%20space%20here%20so%20the%20textNode%20remains%3B%20some%20browsers%0A%2F%2F%20(IE)%20omit%20an%20empty%20textNode%20following%20cloneNode%2FimportNode.%0Anode.textContent%3DliteralFromParts(parts)%7C%7C'%20'%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'text'%2C'textContent'%2Cparts)%3Bnoted%3Dtrue%3B%7D%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20attributes.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7Bvar%20parts%3Dthis._parseBindings(value%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Attribute%20or%20property%0Avar%20origName%3Dname%3Bvar%20kind%3D'property'%3B%2F%2F%20The%20only%20way%20we%20see%20a%20capital%20letter%20here%20is%20if%20the%20attr%20has%0A%2F%2F%20a%20capital%20letter%20in%20it%20per%20spec.%20In%20this%20case%2C%20to%20make%20sure%0A%2F%2F%20this%20binding%20works%2C%20we%20go%20ahead%20and%20make%20the%20binding%20to%20the%20attribute.%0Aif(capitalAttributeRegex.test(name))%7Bkind%3D'attribute'%3B%7Delse%20if(name%5Bname.length-1%5D%3D%3D'%24')%7Bname%3Dname.slice(0%2C-1)%3Bkind%3D'attribute'%3B%7D%2F%2F%20Initialize%20attribute%20bindings%20with%20any%20literal%20parts%0Avar%20literal%3DliteralFromParts(parts)%3Bif(literal%26%26kind%3D%3D'attribute')%7B%2F%2F%20Ensure%20a%20ShadyCSS%20template%20scoped%20style%20is%20not%20removed%0A%2F%2F%20when%20a%20class%24%20binding's%20initial%20literal%20value%20is%20set.%0Aif(name%3D%3D'class'%26%26node.hasAttribute('class'))%7Bliteral%2B%3D'%20'%2Bnode.getAttribute(name)%3B%7Dnode.setAttribute(name%2Cliteral)%3B%7D%2F%2F%20Clear%20attribute%20before%20removing%2C%20since%20IE%20won't%20allow%20removing%0A%2F%2F%20%60value%60%20attribute%20if%20it%20previously%20had%20a%20value%20(can't%0A%2F%2F%20unconditionally%20set%20''%20before%20removing%20since%20attributes%20with%20%60%24%60%0A%2F%2F%20can't%20be%20set%20using%20setAttribute)%0Aif(node.localName%3D%3D%3D'input'%26%26origName%3D%3D%3D'value')%7Bnode.setAttribute(origName%2C'')%3B%7D%2F%2F%20Remove%20annotation%0Anode.removeAttribute(origName)%3B%2F%2F%20Case%20hackery%3A%20attributes%20are%20lower-case%2C%20but%20bind%20targets%0A%2F%2F%20(properties)%20are%20case%20sensitive.%20Gambit%20is%20to%20map%20dash-case%20to%0A%2F%2F%20camel-case%3A%20%60foo-bar%60%20becomes%20%60fooBar%60.%0A%2F%2F%20Attribute%20bindings%20are%20excepted.%0Aif(kind%3D%3D%3D'property')%7Bname%3DPolymer.CaseMap.dashToCamelCase(name)%3B%7DaddBinding(this%2CtemplateInfo%2CnodeInfo%2Ckind%2Cname%2Cparts%2Cliteral)%3Breturn%20true%3B%7Delse%7Breturn%20_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNodeAttribute'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20binding%20the%20properties%20that%20a%20nested%20template%20depends%20on%20to%20the%20template%0A%20%20%20%20%20%20%20*%20as%20%60_host_%3Cproperty%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNestedTemplate'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3B%2F%2F%20Merge%20host%20props%20into%20outer%20template%20and%20add%20bindings%0Avar%20hostProps%3DnodeInfo.templateInfo.hostProps%3Bvar%20mode%3D'%7B'%3Bfor(var%20source%20in%20hostProps)%7Bvar%20parts%3D%5B%7Bmode%3Amode%2Csource%3Asource%2Cdependencies%3A%5Bsource%5D%7D%5D%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'property'%2C'_host_'%2Bsource%2Cparts)%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20parse%20text%20in%20a%20template%20(either%20attribute%20values%20or%0A%20%20%20%20%20%20%20*%20textContent)%20into%20binding%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Any%20overrides%20of%20this%20method%20should%20return%20an%20array%20of%20binding%20part%0A%20%20%20%20%20%20%20*%20metadata%20%20representing%20one%20or%20more%20bindings%20found%20in%20the%20provided%20text%0A%20%20%20%20%20%20%20*%20and%20any%20%22literal%22%20text%20in%20between.%20%20Any%20non-literal%20parts%20will%20be%20passed%0A%20%20%20%20%20%20%20*%20to%20%60_evaluateBinding%60%20when%20any%20dependencies%20change.%20%20The%20only%20required%0A%20%20%20%20%20%20%20*%20fields%20of%20each%20%22part%22%20in%20the%20returned%20array%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60dependencies%60%20-%20Array%20containing%20trigger%20metadata%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20that%20should%20trigger%20the%20binding%20to%20update%0A%20%20%20%20%20%20%20*%20-%20%60literal%60%20-%20String%20containing%20text%20if%20the%20part%20represents%20a%20literal%3B%0A%20%20%20%20%20%20%20*%20%20%20in%20this%20case%20no%20%60dependencies%60%20are%20needed%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Additional%20metadata%20for%20use%20by%20%60_evaluateBinding%60%20may%20be%20provided%20in%0A%20%20%20%20%20%20%20*%20each%20part%20object%20as%20needed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20handles%20the%20following%20types%20of%20bindings%0A%20%20%20%20%20%20%20*%20(one%20or%20more%20may%20be%20intermixed%20with%20literal%20strings)%3A%0A%20%20%20%20%20%20%20*%20-%20Property%20binding%3A%20%60%5B%5Bprop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Path%20binding%3A%20%60%5B%5Bobject.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Negated%20property%20or%20path%20bindings%3A%20%60%5B%5B!prop%5D%5D%60%20or%20%60%5B%5B!object.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Two-way%20property%20or%20path%20bindings%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%7B%7Bprop%7D%7D%60%2C%20%60%7B%7Bobject.prop%7D%7D%60%2C%20%60%7B%7B!prop%7D%7D%60%20or%20%60%7B%7B!object.prop%7D%7D%60%0A%20%20%20%20%20%20%20*%20-%20Inline%20computed%20method%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%5B%5Bcompute(a%2C%20'literal'%2C%20b)%5D%5D%60%2C%20%60%5B%5B!compute(a%2C%20'literal'%2C%20b)%5D%5D%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20uses%20a%20regular%20expression%20for%20best%0A%20%20%20%20%20%20%20*%20performance.%20However%2C%20the%20regular%20expression%20uses%20a%20white-list%20of%0A%20%20%20%20%20%20%20*%20allowed%20characters%20in%20a%20data-binding%2C%20which%20causes%20problems%20for%0A%20%20%20%20%20%20%20*%20data-bindings%20that%20do%20use%20characters%20not%20in%20this%20white-list.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Instead%20of%20updating%20the%20white-list%20with%20all%20allowed%20characters%2C%0A%20%20%20%20%20%20%20*%20there%20is%20a%20StrictBindingParser%20(see%20lib%2Fmixins%2Fstrict-binding-parser)%0A%20%20%20%20%20%20%20*%20that%20uses%20a%20state%20machine%20instead.%20This%20state%20machine%20is%20able%20to%20handle%0A%20%20%20%20%20%20%20*%20all%20characters.%20However%2C%20it%20is%20slightly%20less%20performant%2C%20therefore%20we%0A%20%20%20%20%20%20%20*%20extracted%20it%20into%20a%20separate%20optional%20mixin.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20Text%20to%20parse%20from%20attribute%20or%20textContent%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Current%20template%20metadata%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C!BindingPart%3E%7D%20Array%20of%20binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseBindings'%2Cvalue%3Afunction%20_parseBindings(text%2CtemplateInfo)%7Bvar%20parts%3D%5B%5D%3Bvar%20lastIndex%3D0%3Bvar%20m%3Dvoid%200%3B%2F%2F%20Example%3A%20%22literal1%7B%7Bprop%7D%7Dliteral2%5B%5B!compute(foo%2Cbar)%5D%5Dfinal%22%0A%2F%2F%20Regex%20matches%3A%0A%2F%2F%20%20%20%20%20%20%20%20Iteration%201%3A%20%20Iteration%202%3A%0A%2F%2F%20m%5B1%5D%3A%20'%7B%7B'%20%20%20%20%20%20%20%20%20%20'%5B%5B'%0A%2F%2F%20m%5B2%5D%3A%20''%20%20%20%20%20%20%20%20%20%20%20%20'!'%0A%2F%2F%20m%5B3%5D%3A%20'prop'%20%20%20%20%20%20%20%20'compute(foo%2Cbar)'%0Awhile((m%3DbindingRegex.exec(text))!%3D%3Dnull)%7B%2F%2F%20Add%20literal%20part%0Aif(m.index%3ElastIndex)%7Bparts.push(%7Bliteral%3Atext.slice(lastIndex%2Cm.index)%7D)%3B%7D%2F%2F%20Add%20binding%20part%0Avar%20mode%3Dm%5B1%5D%5B0%5D%3Bvar%20negate%3DBoolean(m%5B2%5D)%3Bvar%20source%3Dm%5B3%5D.trim()%3Bvar%20customEvent%3Dfalse%2CnotifyEvent%3D''%2Ccolon%3D-1%3Bif(mode%3D%3D'%7B'%26%26(colon%3Dsource.indexOf('%3A%3A'))%3E0)%7BnotifyEvent%3Dsource.substring(colon%2B2)%3Bsource%3Dsource.substring(0%2Ccolon)%3BcustomEvent%3Dtrue%3B%7Dvar%20signature%3DparseMethod(source)%3Bvar%20dependencies%3D%5B%5D%3Bif(signature)%7B%2F%2F%20Inline%20computed%20function%0Avar%20args%3Dsignature.args%2CmethodName%3Dsignature.methodName%3Bfor(var%20i%3D0%3Bi%3Cargs.length%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bif(!arg.literal)%7Bdependencies.push(arg)%3B%7D%7Dvar%20dynamicFns%3DtemplateInfo.dynamicFns%3Bif(dynamicFns%26%26dynamicFns%5BmethodName%5D%7C%7Csignature.static)%7Bdependencies.push(methodName)%3Bsignature.dynamicFn%3Dtrue%3B%7D%7Delse%7B%2F%2F%20Property%20or%20path%0Adependencies.push(source)%3B%7Dparts.push(%7Bsource%3Asource%2Cmode%3Amode%2Cnegate%3Anegate%2CcustomEvent%3AcustomEvent%2Csignature%3Asignature%2Cdependencies%3Adependencies%2Cevent%3AnotifyEvent%7D)%3BlastIndex%3DbindingRegex.lastIndex%3B%7D%2F%2F%20Add%20a%20final%20literal%20part%0Aif(lastIndex%26%26lastIndex%3Ctext.length)%7Bvar%20literal%3Dtext.substring(lastIndex)%3Bif(literal)%7Bparts.push(%7Bliteral%3Aliteral%7D)%3B%7D%7Dif(parts.length)%7Breturn%20parts%3B%7Delse%7Breturn%20null%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20evaluate%20a%20previously%20parsed%20binding%20part%20based%20on%20a%20set%20of%0A%20%20%20%20%20%20%20*%20one%20or%20more%20changed%20dependencies.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bthis%7D%20inst%20Element%20that%20should%20be%20used%20as%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20binding%20dependencies%0A%20%20%20%20%20%20%20*%20%40param%20%7BBindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20that%20triggered%20this%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20the%20binding%20part%20evaluated%20to%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_evaluateBinding'%2Cvalue%3Afunction%20_evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%7Bvar%20value%3Dvoid%200%3Bif(part.signature)%7Bvalue%3DrunMethodEffect(inst%2Cpath%2Cprops%2ColdProps%2Cpart.signature)%3B%7Delse%20if(path!%3Dpart.source)%7Bvalue%3DPolymer.Path.get(inst%2Cpart.source)%3B%7Delse%7Bif(hasPaths%26%26Polymer.Path.isPath(path))%7Bvalue%3DPolymer.Path.get(inst%2Cpath)%3B%7Delse%7Bvalue%3Dinst.__data%5Bpath%5D%3B%7D%7Dif(part.negate)%7Bvalue%3D!value%3B%7Dreturn%20value%3B%7D%7D%5D)%3Breturn%20PropertyEffects%3B%7D(propertyEffectsBase)%3B%2F%2F%20make%20a%20typing%20for%20closure%20%3AP%0APropertyEffectsType%3DPropertyEffects%3Breturn%20PropertyEffects%3B%7D)%3B%2F**%0A%20%20%20*%20Helper%20api%20for%20enqueuing%20client%20dom%20created%20by%20a%20host%20element.%0A%20%20%20*%0A%20%20%20*%20By%20default%20elements%20are%20flushed%20via%20%60_flushProperties%60%20when%0A%20%20%20*%20%60connectedCallback%60%20is%20called.%20Elements%20attach%20their%20client%20dom%20to%0A%20%20%20*%20themselves%20at%20%60ready%60%20time%20which%20results%20from%20this%20first%20flush.%0A%20%20%20*%20This%20provides%20an%20ordering%20guarantee%20that%20the%20client%20dom%20an%20element%0A%20%20%20*%20creates%20is%20flushed%20before%20the%20element%20itself%20(i.e.%20client%20%60ready%60%0A%20%20%20*%20fires%20before%20host%20%60ready%60).%0A%20%20%20*%0A%20%20%20*%20However%2C%20if%20%60_flushProperties%60%20is%20called%20*before*%20an%20element%20is%20connected%2C%0A%20%20%20*%20as%20for%20example%20%60Templatize%60%20does%2C%20this%20ordering%20guarantee%20cannot%20be%0A%20%20%20*%20satisfied%20because%20no%20elements%20are%20connected.%20(Note%3A%20Bound%20elements%20that%0A%20%20%20*%20receive%20data%20do%20become%20enqueued%20clients%20and%20are%20properly%20ordered%20but%0A%20%20%20*%20unbound%20elements%20are%20not.)%0A%20%20%20*%0A%20%20%20*%20To%20maintain%20the%20desired%20%22client%20before%20host%22%20ordering%20guarantee%20for%20this%0A%20%20%20*%20case%20we%20rely%20on%20the%20%22host%20stack.%20Client%20nodes%20registers%20themselves%20with%0A%20%20%20*%20the%20creating%20host%20element%20when%20created.%20This%20ensures%20that%20all%20client%20dom%0A%20%20%20*%20is%20readied%20in%20the%20proper%20order%2C%20maintaining%20the%20desired%20guarantee.%0A%20%20%20*%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20hostStack%3D%7Bstack%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20add%20to%20hostStack%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FregisterHost%3Afunction%20registerHost(inst)%7Bif(this.stack.length)%7Bvar%20host%3Dthis.stack%5Bthis.stack.length-1%5D%3Bhost._enqueueClient(inst)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20begin%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FbeginHosting%3Afunction%20beginHosting(inst)%7Bthis.stack.push(inst)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20end%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FendHosting%3Afunction%20endHosting(inst)%7Bvar%20stackLen%3Dthis.stack.length%3Bif(stackLen%26%26this.stack%5BstackLen-1%5D%3D%3Dinst)%7Bthis.stack.pop()%3B%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-effects.html.js%0A",
            "duration": 51,
            "startTime": 10732.536497736814
          }
        ],
        "sortedBy": [
          "duration"
        ],
        "skipSumming": [
          "startTime"
        ],
        "debugData": {
          "type": "debugdata",
          "urls": [
            "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otTCF.js",
            "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otBannerSdk.js",
            "data:text/javascript;charset=utf-8,%2F%2F%20bc%0APolymer.Base%3DPolymer.LegacyElementMixin(HTMLElement).prototype%3B%2F%2F%20NOTE%3A%20this%20is%20here%20for%20modulizer%20to%20export%20%60html%60%20for%20the%20module%20version%20of%20this%20file%0APolymer.html%3DPolymer.html%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Fpolymer.html.js%0A",
            "Unattributable",
            "https://eu.desmoinesregister.com/",
            "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "https://atoms.desmoinesregister.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7BObject%7D%20*%2Fvar%20CaseMap%3DPolymer.CaseMap%3B%2F%2F%20Monotonically%20increasing%20unique%20ID%20used%20for%20de-duping%20effects%20triggered%0A%2F%2F%20from%20multiple%20properties%20in%20the%20same%20turn%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20Property%20effect%20types%3B%20effects%20are%20stored%20on%20the%20prototype%20using%20these%20keys%0A%20%20%20*%20%40enum%20%7Bstring%7D%0A%20%20%20*%2Fvar%20TYPES%3D%7BCOMPUTE%3A'__computeEffects'%2CREFLECT%3A'__reflectEffects'%2CNOTIFY%3A'__notifyEffects'%2CPROPAGATE%3A'__propagateEffects'%2COBSERVE%3A'__observeEffects'%2CREAD_ONLY%3A'__readOnly'%7D%3B%2F**%20%40const%20%7BRegExp%7D%20*%2Fvar%20capitalAttributeRegex%3D%2F%5BA-Z%5D%2F%3B%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20name%3A%20(string%20%7C%20undefined)%2C%0A%20%20%20*%20structured%3A%20(boolean%20%7C%20undefined)%2C%0A%20%20%20*%20wildcard%3A%20(boolean%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataTrigger%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20info%3A%20%3F%2C%0A%20%20%20*%20trigger%3A%20(!DataTrigger%20%7C%20undefined)%2C%0A%20%20%20*%20fn%3A%20(!Function%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataEffect%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0Avar%20PropertyEffectsType%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Ensures%20that%20the%20model%20has%20an%20own-property%20map%20of%20effects%20for%20the%20given%20type.%0A%20%20%20*%20The%20model%20may%20be%20a%20prototype%20or%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20Property%20effects%20are%20stored%20as%20arrays%20of%20effects%20by%20property%20in%20a%20map%2C%0A%20%20%20*%20by%20named%20type%20on%20the%20model.%20e.g.%0A%20%20%20*%0A%20%20%20*%20%20%20__computeEffects%3A%20%7B%0A%20%20%20*%20%20%20%20%20foo%3A%20%5B%20...%20%5D%2C%0A%20%20%20*%20%20%20%20%20bar%3A%20%5B%20...%20%5D%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20If%20the%20model%20does%20not%20yet%20have%20an%20effect%20map%20for%20the%20type%2C%20one%20is%20created%0A%20%20%20*%20and%20returned.%20%20If%20it%20does%2C%20but%20it%20is%20not%20an%20own%20property%20(i.e.%20the%0A%20%20%20*%20prototype%20had%20effects)%2C%20the%20the%20map%20is%20deeply%20cloned%20and%20the%20copy%20is%0A%20%20%20*%20set%20on%20the%20model%20and%20returned%2C%20ready%20for%20new%20effects%20to%20be%20added.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Property%20effect%20type%0A%20%20%20*%20%40return%20%7BObject%7D%20The%20own-property%20map%20of%20effects%20for%20the%20given%20type%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20ensureOwnEffectMap(model%2Ctype)%7Bvar%20effects%3Dmodel%5Btype%5D%3Bif(!effects)%7Beffects%3Dmodel%5Btype%5D%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(type))%7Beffects%3Dmodel%5Btype%5D%3DObject.create(model%5Btype%5D)%3Bfor(var%20p%20in%20effects)%7Bvar%20protoFx%3Deffects%5Bp%5D%3Bvar%20instFx%3Deffects%5Bp%5D%3DArray(protoFx.length)%3Bfor(var%20i%3D0%3Bi%3CprotoFx.length%3Bi%2B%2B)%7BinstFx%5Bi%5D%3DprotoFx%5Bi%5D%3B%7D%7D%7Dreturn%20effects%3B%7D%2F%2F%20--%20effects%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Runs%20all%20effects%20of%20a%20given%20type%20for%20the%20given%20set%20of%20property%20changes%0A%20%20%20*%20on%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffects(inst%2Ceffects%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bif(effects)%7Bvar%20ran%3Dfalse%3Bvar%20id%3DdedupeId%2B%2B%3Bfor(var%20prop%20in%20props)%7Bif(runEffectsForProperty(inst%2Ceffects%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs))%7Bran%3Dtrue%3B%7D%7Dreturn%20ran%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Runs%20a%20list%20of%20effects%20for%20a%20given%20property.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7Bnumber%7D%20dedupeId%20Counter%20used%20for%20de-duping%20effects%0A%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Name%20of%20changed%20property%0A%20%20%20*%20%40param%20%7B*%7D%20props%20Changed%20properties%0A%20%20%20*%20%40param%20%7B*%7D%20oldProps%20Old%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffectsForProperty(inst%2Ceffects%2CdedupeId%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bvar%20ran%3Dfalse%3Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(prop)%3Aprop%3Bvar%20fxs%3Deffects%5BrootProperty%5D%3Bif(fxs)%7Bfor(var%20i%3D0%2Cl%3Dfxs.length%2Cfx%3Bi%3Cl%26%26(fx%3Dfxs%5Bi%5D)%3Bi%2B%2B)%7Bif((!fx.info%7C%7Cfx.info.lastRun!%3D%3DdedupeId)%26%26(!hasPaths%7C%7CpathMatchesTrigger(prop%2Cfx.trigger)))%7Bif(fx.info)%7Bfx.info.lastRun%3DdedupeId%3B%7Dfx.fn(inst%2Cprop%2Cprops%2ColdProps%2Cfx.info%2ChasPaths%2CextraArgs)%3Bran%3Dtrue%3B%7D%7D%7Dreturn%20ran%3B%7D%2F**%0A%20%20%20*%20Determines%20whether%20a%20property%2Fpath%20that%20has%20changed%20matches%20the%20trigger%0A%20%20%20*%20criteria%20for%20an%20effect.%20%20A%20trigger%20is%20a%20descriptor%20with%20the%20following%0A%20%20%20*%20structure%2C%20which%20matches%20the%20descriptors%20returned%20from%20%60parseArg%60.%0A%20%20%20*%20e.g.%20for%20%60foo.bar.*%60%3A%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20trigger%3A%20%7B%0A%20%20%20*%20%20%20name%3A%20'a.b'%2C%0A%20%20%20*%20%20%20structured%3A%20true%2C%0A%20%20%20*%20%20%20wildcard%3A%20true%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20If%20no%20trigger%20is%20given%2C%20the%20path%20is%20deemed%20to%20match.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20or%20property%20that%20changed%0A%20%20%20*%20%40param%20%7BDataTrigger%7D%20trigger%20Descriptor%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20path%20matched%20the%20trigger%0A%20%20%20*%2Ffunction%20pathMatchesTrigger(path%2Ctrigger)%7Bif(trigger)%7Bvar%20triggerPath%3Dtrigger.name%3Breturn%20triggerPath%3D%3Dpath%7C%7Ctrigger.structured%26%26Polymer.Path.isAncestor(triggerPath%2Cpath)%7C%7Ctrigger.wildcard%26%26Polymer.Path.isDescendant(triggerPath%2Cpath)%3B%7Delse%7Breturn%20true%3B%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22observer%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Calls%20the%20method%20with%20%60info.methodName%60%20on%20the%20instance%2C%20passing%20the%0A%20%20%20*%20new%20and%20old%20values.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runObserverEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20fn%3Dtypeof%20info.method%3D%3D%3D%22string%22%3Finst%5Binfo.method%5D%3Ainfo.method%3Bvar%20changedProp%3Dinfo.property%3Bif(fn)%7Bfn.call(inst%2Cinst.__data%5BchangedProp%5D%2ColdProps%5BchangedProp%5D)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('observer%20method%20%60'%2Binfo.method%2B'%60%20not%20defined')%3B%7D%7D%2F**%0A%20%20%20*%20Runs%20%22notify%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20will%20dispatch%20path%20notification%20events%20in%20the%20case%20that%20the%20property%0A%20%20%20*%20changed%20was%20a%20path%20and%20the%20root%20property%20for%20that%20path%20didn't%20have%20a%0A%20%20%20*%20%22notify%22%20effect.%20%20This%20is%20to%20maintain%201.0%20behavior%20that%20did%20not%20require%0A%20%20%20*%20%60notify%3A%20true%60%20to%20ensure%20object%20sub-property%20notifications%20were%0A%20%20%20*%20sent.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20notifyProps%20Bag%20of%20properties%20to%20notify%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffects(inst%2CnotifyProps%2Cprops%2ColdProps%2ChasPaths)%7B%2F%2F%20Notify%0Avar%20fxs%3Dinst%5BTYPES.NOTIFY%5D%3Bvar%20notified%3Dvoid%200%3Bvar%20id%3DdedupeId%2B%2B%3B%2F%2F%20Try%20normal%20notify%20effects%3B%20if%20none%2C%20fall%20back%20to%20try%20path%20notification%0Afor(var%20prop%20in%20notifyProps)%7Bif(notifyProps%5Bprop%5D)%7Bif(fxs%26%26runEffectsForProperty(inst%2Cfxs%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths))%7Bnotified%3Dtrue%3B%7Delse%20if(hasPaths%26%26notifyPath(inst%2Cprop%2Cprops))%7Bnotified%3Dtrue%3B%7D%7D%7D%2F%2F%20Flush%20host%20if%20we%20actually%20notified%20and%20host%20was%20batching%0A%2F%2F%20And%20the%20host%20has%20already%20initialized%20clients%3B%20this%20prevents%0A%2F%2F%20an%20issue%20with%20a%20host%20observing%20data%20changes%20before%20clients%20are%20ready.%0Avar%20host%3Dvoid%200%3Bif(notified%26%26(host%3Dinst.__dataHost)%26%26host._invalidateProperties)%7Bhost._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20with%20path%20information%20in%20the%20detail%0A%20%20%20*%20object%20to%20indicate%20a%20sub-path%20of%20the%20property%20was%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20that%20was%20changed%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20path%20was%20notified%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifyPath(inst%2Cpath%2Cprops)%7Bvar%20rootProperty%3DPolymer.Path.root(path)%3Bif(rootProperty!%3D%3Dpath)%7Bvar%20eventName%3DPolymer.CaseMap.camelToDashCase(rootProperty)%2B'-changed'%3BdispatchNotifyEvent(inst%2CeventName%2Cprops%5Bpath%5D%2Cpath)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20to%20indicate%20a%20property%20(or%20path)%0A%20%20%20*%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20The%20name%20of%20the%20event%20to%20send%20('%7Bproperty%7D-changed')%0A%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20of%20the%20changed%20property%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20null%20%7C%20undefined%7D%20path%20If%20a%20sub-path%20of%20this%20property%20changed%2C%20the%20path%0A%20%20%20*%20%20%20that%20changed%20(optional).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2Ffunction%20dispatchNotifyEvent(inst%2CeventName%2Cvalue%2Cpath)%7Bvar%20detail%3D%7Bvalue%3Avalue%2CqueueProperty%3Atrue%7D%3Bif(path)%7Bdetail.path%3Dpath%3B%7D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finst.dispatchEvent(new%20CustomEvent(eventName%2C%7Bdetail%3Adetail%7D))%3B%7D%2F**%0A%20%20%20*%20Implements%20the%20%22notify%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Dispatches%20a%20non-bubbling%20event%20named%20%60info.eventName%60%20on%20the%20instance%0A%20%20%20*%20with%20a%20detail%20object%20containing%20the%20new%20%60value%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo%2ChasPaths)%7Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(property)%3Aproperty%3Bvar%20path%3DrootProperty!%3Dproperty%3Fproperty%3Anull%3Bvar%20value%3Dpath%3FPolymer.Path.get(inst%2Cpath)%3Ainst.__data%5Bproperty%5D%3Bif(path%26%26value%3D%3D%3Dundefined)%7Bvalue%3Dprops%5Bproperty%5D%3B%2F%2F%20specifically%20for%20.splices%0A%7DdispatchNotifyEvent(inst%2Cinfo.eventName%2Cvalue%2Cpath)%3B%7D%2F**%0A%20%20%20*%20Handler%20function%20for%202-way%20notification%20events.%20Receives%20context%0A%20%20%20*%20information%20captured%20in%20the%20%60addNotifyListener%60%20closure%20from%20the%0A%20%20%20*%20%60__notifyListeners%60%20metadata.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20value%20of%20the%20notified%20property%20to%20the%20host%20property%20or%20path.%20%20If%0A%20%20%20*%20the%20event%20contained%20path%20information%2C%20translate%20that%20path%20to%20the%20host%0A%20%20%20*%20scope's%20name%20for%20that%20path%20first.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BCustomEvent%7D%20event%20Notification%20event%20(e.g.%20'%3Cproperty%3E-changed')%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20handling%20the%20notification%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20fromProp%20Child%20element%20property%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bstring%7D%20toPath%20Host%20property%2Fpath%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bboolean%7D%20negate%20Whether%20the%20binding%20was%20negated%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20handleNotification(event%2Cinst%2CfromProp%2CtoPath%2Cnegate)%7Bvar%20value%3Dvoid%200%3Bvar%20detail%3D%2F**%20%40type%20%7BObject%7D%20*%2Fevent.detail%3Bvar%20fromPath%3Ddetail%26%26detail.path%3Bif(fromPath)%7BtoPath%3DPolymer.Path.translate(fromProp%2CtoPath%2CfromPath)%3Bvalue%3Ddetail%26%26detail.value%3B%7Delse%7Bvalue%3Devent.currentTarget%5BfromProp%5D%3B%7Dvalue%3Dnegate%3F!value%3Avalue%3Bif(!inst%5BTYPES.READ_ONLY%5D%7C%7C!inst%5BTYPES.READ_ONLY%5D%5BtoPath%5D)%7Bif(inst._setPendingPropertyOrPath(toPath%2Cvalue%2Ctrue%2CBoolean(fromPath))%26%26(!detail%7C%7C!detail.queueProperty))%7Binst._invalidateProperties()%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22reflect%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20attribute%20named%20%60info.attrName%60%20to%20the%20given%20property%20value.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runReflectEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20value%3Dinst.__data%5Bproperty%5D%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cinfo.attrName%2C'attribute'%2C%2F**%20%40type%20%7BNode%7D%20*%2Finst)%3B%7Dinst._propertyToAttribute(property%2Cinfo.attrName%2Cvalue)%3B%7D%2F**%0A%20%20%20*%20Runs%20%22computed%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20continues%20to%20run%20computed%20effects%20based%20on%20the%20output%20of%20each%20pass%20until%0A%20%20%20*%20there%20are%20no%20more%20newly%20computed%20properties.%20%20This%20ensures%20that%20all%0A%20%20%20*%20properties%20that%20will%20be%20computed%20by%20the%20initial%20set%20of%20changes%20are%0A%20%20%20*%20computed%20before%20other%20effects%20(binding%20propagation%2C%20observers%2C%20and%20notify)%0A%20%20%20*%20run.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffects(inst%2CchangedProps%2ColdProps%2ChasPaths)%7Bvar%20computeEffects%3Dinst%5BTYPES.COMPUTE%5D%3Bif(computeEffects)%7Bvar%20inputProps%3DchangedProps%3Bwhile(runEffects(inst%2CcomputeEffects%2CinputProps%2ColdProps%2ChasPaths))%7BObject.assign(oldProps%2Cinst.__dataOld)%3BObject.assign(changedProps%2Cinst.__dataPending)%3BinputProps%3Dinst.__dataPending%3Binst.__dataPending%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22computed%20property%22%20effect%20by%20running%20the%20method%20with%20the%0A%20%20%20*%20values%20of%20the%20arguments%20specified%20in%20the%20%60info%60%20object%20and%20setting%20the%0A%20%20%20*%20return%20value%20to%20the%20computed%20property%20specified.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20result%3DrunMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%3Bvar%20computedProp%3Dinfo.methodInfo%3Bif(inst.__dataHasAccessor%26%26inst.__dataHasAccessor%5BcomputedProp%5D)%7Binst._setPendingProperty(computedProp%2Cresult%2Ctrue)%3B%7Delse%7Binst%5BcomputedProp%5D%3Dresult%3B%7D%7D%2F**%0A%20%20%20*%20Computes%20path%20changes%20based%20on%20path%20links%20set%20up%20using%20the%20%60linkPaths%60%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20whose%20props%20are%20changing%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3C(string%7Cnumber)%3E%7D%20path%20Path%20that%20has%20changed%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20changed%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeLinkedPaths(inst%2Cpath%2Cvalue)%7Bvar%20links%3Dinst.__dataLinkedPaths%3Bif(links)%7Bvar%20link%3Dvoid%200%3Bfor(var%20a%20in%20links)%7Bvar%20b%3Dlinks%5Ba%5D%3Bif(Polymer.Path.isDescendant(a%2Cpath))%7Blink%3DPolymer.Path.translate(a%2Cb%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7Delse%20if(Polymer.Path.isDescendant(b%2Cpath))%7Blink%3DPolymer.Path.translate(b%2Ca%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7D%7D%7D%7D%2F%2F%20--%20bindings%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Adds%20binding%20metadata%20to%20the%20current%20%60nodeInfo%60%2C%20and%20binding%20effects%0A%20%20%20*%20for%20all%20part%20dependencies%20to%20%60templateInfo%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20*%20%40param%20%7Bstring%7D%20kind%20Binding%20kind%2C%20either%20'property'%2C%20'attribute'%2C%20or%20'text'%0A%20%20%20*%20%40param%20%7Bstring%7D%20target%20Target%20property%20name%0A%20%20%20*%20%40param%20%7B!Array%3C!BindingPart%3E%7D%20parts%20Array%20of%20binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bstring%3D%7D%20literal%20Literal%20text%20surrounding%20binding%20parts%20(specified%0A%20%20%20*%20%20%20only%20for%20'property'%20bindings%2C%20since%20these%20must%20be%20initialized%20as%20part%0A%20%20%20*%20%20%20of%20boot-up)%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addBinding(constructor%2CtemplateInfo%2CnodeInfo%2Ckind%2Ctarget%2Cparts%2Cliteral)%7B%2F%2F%20Create%20binding%20metadata%20and%20add%20to%20nodeInfo%0AnodeInfo.bindings%3DnodeInfo.bindings%7C%7C%5B%5D%3Bvar%2F**%20Binding%20*%2Fbinding%3D%7Bkind%3Akind%2Ctarget%3Atarget%2Cparts%3Aparts%2Cliteral%3Aliteral%2CisCompound%3Aparts.length!%3D%3D1%7D%3BnodeInfo.bindings.push(binding)%3B%2F%2F%20Add%20listener%20info%20to%20binding%20metadata%0Aif(shouldAddListener(binding))%7Bvar%20_binding%24parts%24%3Dbinding.parts%5B0%5D%2Cevent%3D_binding%24parts%24.event%2Cnegate%3D_binding%24parts%24.negate%3Bbinding.listenerEvent%3Devent%7C%7CCaseMap.camelToDashCase(target)%2B'-changed'%3Bbinding.listenerNegate%3Dnegate%3B%7D%2F%2F%20Add%20%22propagate%22%20property%20effects%20to%20templateInfo%0Avar%20index%3DtemplateInfo.nodeInfoList.length%3Bfor(var%20i%3D0%3Bi%3Cbinding.parts.length%3Bi%2B%2B)%7Bvar%20part%3Dbinding.parts%5Bi%5D%3Bpart.compoundIndex%3Di%3BaddEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%3B%7D%7D%2F**%0A%20%20%20*%20Adds%20property%20effects%20to%20the%20given%20%60templateInfo%60%20for%20the%20given%20binding%0A%20%20%20*%20part.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20into%20%60nodeInfoList%60%20for%20this%20node%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20addEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%7Bif(!part.literal)%7Bif(binding.kind%3D%3D%3D'attribute'%26%26binding.target%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Cannot%20set%20attribute%20'%2Bbinding.target%2B'%20because%20%22-%22%20is%20not%20a%20valid%20attribute%20starting%20character')%3B%7Delse%7Bvar%20dependencies%3Dpart.dependencies%3Bvar%20info%3D%7Bindex%3Aindex%2Cbinding%3Abinding%2Cpart%3Apart%2Cevaluator%3Aconstructor%7D%3Bfor(var%20j%3D0%3Bj%3Cdependencies.length%3Bj%2B%2B)%7Bvar%20trigger%3Ddependencies%5Bj%5D%3Bif(typeof%20trigger%3D%3D'string')%7Btrigger%3DparseArg(trigger)%3Btrigger.wildcard%3Dtrue%3B%7Dconstructor._addTemplatePropertyEffect(templateInfo%2Ctrigger.rootProperty%2C%7Bfn%3ArunBindingEffect%2Cinfo%3Ainfo%2Ctrigger%3Atrigger%7D)%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22binding%22%20(property%2Fpath%20binding)%20effect.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20binding%20syntax%20is%20overridable%20via%20%60_parseBindings%60%20and%0A%20%20%20*%20%60_evaluateBinding%60.%20%20This%20method%20will%20call%20%60_evaluateBinding%60%20for%20any%0A%20%20%20*%20non-literal%20parts%20returned%20from%20%60_parseBindings%60.%20%20However%2C%0A%20%20%20*%20there%20is%20no%20support%20for%20_path_%20bindings%20via%20custom%20binding%20parts%2C%0A%20%20%20*%20as%20this%20is%20specific%20to%20Polymer's%20path%20binding%20syntax.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7BArray%7D%20nodeList%20List%20of%20nodes%20associated%20with%20%60nodeInfoList%60%20template%0A%20%20%20*%20%20%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runBindingEffect(inst%2Cpath%2Cprops%2ColdProps%2Cinfo%2ChasPaths%2CnodeList)%7Bvar%20node%3DnodeList%5Binfo.index%5D%3Bvar%20binding%3Dinfo.binding%3Bvar%20part%3Dinfo.part%3B%2F%2F%20Subpath%20notification%3A%20transform%20path%20and%20set%20to%20client%0A%2F%2F%20e.g.%3A%20foo%3D%22%7B%7Bobj.sub%7D%7D%22%2C%20path%3A%20'obj.sub.prop'%2C%20set%20'foo.prop'%3Dobj.sub.prop%0Aif(hasPaths%26%26part.source%26%26path.length%3Epart.source.length%26%26binding.kind%3D%3D'property'%26%26!binding.isCompound%26%26node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bbinding.target%5D)%7Bvar%20value%3Dprops%5Bpath%5D%3Bpath%3DPolymer.Path.translate(part.source%2Cbinding.target%2Cpath)%3Bif(node._setPendingPropertyOrPath(path%2Cvalue%2Cfalse%2Ctrue))%7Binst._enqueueClient(node)%3B%7D%7Delse%7Bvar%20_value%3Dinfo.evaluator._evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%3B%2F%2F%20Propagate%20value%20to%20child%0AapplyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2C_value)%3B%7D%7D%2F**%0A%20%20%20*%20Sets%20the%20value%20for%20an%20%22binding%22%20(binding)%20effect%20to%20a%20node%2C%0A%20%20%20*%20either%20as%20a%20property%20or%20attribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20owning%20the%20binding%20effect%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Target%20node%20for%20binding%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20applyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2Cvalue)%7Bvalue%3DcomputeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cbinding.target%2Cbinding.kind%2Cnode)%3B%7Dif(binding.kind%3D%3D'attribute')%7B%2F%2F%20Attribute%20binding%0Ainst._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%2Cvalue%2Cbinding.target)%3B%7Delse%7B%2F%2F%20Property%20binding%0Avar%20prop%3Dbinding.target%3Bif(node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bprop%5D)%7Bif(!node%5BTYPES.READ_ONLY%5D%7C%7C!node%5BTYPES.READ_ONLY%5D%5Bprop%5D)%7Bif(node._setPendingProperty(prop%2Cvalue))%7Binst._enqueueClient(node)%3B%7D%7D%7Delse%7Binst._setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%3B%7D%7D%7D%2F**%0A%20%20%20*%20Transforms%20an%20%22binding%22%20effect%20value%20based%20on%20compound%20%26%20negation%0A%20%20%20*%20effect%20metadata%2C%20as%20well%20as%20handling%20for%20special-case%20properties%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20the%20value%20will%20be%20set%20to%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Transformed%20value%20to%20set%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%7Bif(binding.isCompound)%7Bvar%20storage%3Dnode.__dataCompoundStorage%5Bbinding.target%5D%3Bstorage%5Bpart.compoundIndex%5D%3Dvalue%3Bvalue%3Dstorage.join('')%3B%7Dif(binding.kind!%3D%3D'attribute')%7B%2F%2F%20Some%20browsers%20serialize%20%60undefined%60%20to%20%60%22undefined%22%60%0Aif(binding.target%3D%3D%3D'textContent'%7C%7Cbinding.target%3D%3D%3D'value'%26%26(node.localName%3D%3D%3D'input'%7C%7Cnode.localName%3D%3D%3D'textarea'))%7Bvalue%3Dvalue%3D%3Dundefined%3F''%3Avalue%3B%7D%7Dreturn%20value%3B%7D%2F**%0A%20%20%20*%20Returns%20true%20if%20a%20binding's%20metadata%20meets%20all%20the%20requirements%20to%20allow%0A%20%20%20*%202-way%20binding%2C%20and%20therefore%20a%20%60%3Cproperty%3E-changed%60%20event%20listener%20should%20be%0A%20%20%20*%20added%3A%0A%20%20%20*%20-%20used%20curly%20braces%0A%20%20%20*%20-%20is%20a%20property%20(not%20attribute)%20binding%0A%20%20%20*%20-%20is%20not%20a%20textContent%20binding%0A%20%20%20*%20-%20is%20not%20compound%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%202-way%20listener%20should%20be%20added%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20shouldAddListener(binding)%7Breturn%20Boolean(binding.target)%26%26binding.kind!%3D'attribute'%26%26binding.kind!%3D'text'%26%26!binding.isCompound%26%26binding.parts%5B0%5D.mode%3D%3D%3D'%7B'%3B%7D%2F**%0A%20%20%20*%20Setup%20compound%20binding%20storage%20structures%2C%20notify%20listeners%2C%20and%20dataHost%0A%20%20%20*%20references%20onto%20the%20bound%20nodeList.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20that%20bas%20been%20previously%20bound%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupBindings(inst%2CtemplateInfo)%7B%2F%2F%20Setup%20compound%20storage%2C%20dataHost%2C%20and%20notify%20listeners%0Avar%20nodeList%3DtemplateInfo.nodeList%2CnodeInfoList%3DtemplateInfo.nodeInfoList%3Bif(nodeInfoList.length)%7Bfor(var%20i%3D0%3Bi%3CnodeInfoList.length%3Bi%2B%2B)%7Bvar%20info%3DnodeInfoList%5Bi%5D%3Bvar%20node%3DnodeList%5Bi%5D%3Bvar%20bindings%3Dinfo.bindings%3Bif(bindings)%7Bfor(var%20_i%3D0%3B_i%3Cbindings.length%3B_i%2B%2B)%7Bvar%20binding%3Dbindings%5B_i%5D%3BsetupCompoundStorage(node%2Cbinding)%3BaddNotifyListener(node%2Cinst%2Cbinding)%3B%7D%7Dnode.__dataHost%3Dinst%3B%7D%7D%7D%2F**%0A%20%20%20*%20Initializes%20%60__dataCompoundStorage%60%20local%20storage%20on%20a%20bound%20node%20with%0A%20%20%20*%20initial%20literal%20data%20for%20compound%20bindings%2C%20and%20sets%20the%20joined%0A%20%20%20*%20literal%20parts%20to%20the%20bound%20property.%0A%20%20%20*%0A%20%20%20*%20When%20changes%20to%20compound%20parts%20occur%2C%20they%20are%20first%20set%20into%20the%20compound%0A%20%20%20*%20storage%20array%20for%20that%20property%2C%20and%20then%20the%20array%20is%20joined%20to%20result%20in%0A%20%20%20*%20the%20final%20value%20set%20to%20the%20property%2Fattribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Bound%20node%20to%20initialize%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupCompoundStorage(node%2Cbinding)%7Bif(binding.isCompound)%7B%2F%2F%20Create%20compound%20storage%20map%0Avar%20storage%3Dnode.__dataCompoundStorage%7C%7C(node.__dataCompoundStorage%3D%7B%7D)%3Bvar%20parts%3Dbinding.parts%3B%2F%2F%20Copy%20literals%20from%20parts%20into%20storage%20for%20this%20binding%0Avar%20literals%3Dnew%20Array(parts.length)%3Bfor(var%20j%3D0%3Bj%3Cparts.length%3Bj%2B%2B)%7Bliterals%5Bj%5D%3Dparts%5Bj%5D.literal%3B%7Dvar%20target%3Dbinding.target%3Bstorage%5Btarget%5D%3Dliterals%3B%2F%2F%20Configure%20properties%20with%20their%20literal%20parts%0Aif(binding.literal%26%26binding.kind%3D%3D'property')%7Bnode%5Btarget%5D%3Dbinding.literal%3B%7D%7D%7D%2F**%0A%20%20%20*%20Adds%20a%202-way%20binding%20notification%20event%20listener%20to%20the%20node%20specified%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20node%20Child%20element%20to%20add%20listener%20to%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20to%20handle%20notification%20event%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addNotifyListener(node%2Cinst%2Cbinding)%7Bif(binding.listenerEvent)%7Bvar%20part%3Dbinding.parts%5B0%5D%3Bnode.addEventListener(binding.listenerEvent%2Cfunction(e)%7BhandleNotification(e%2Cinst%2Cbinding.target%2Cpart.source%2Cpart.negate)%3B%7D)%3B%7D%7D%2F%2F%20--%20for%20method-based%20effects%20(complexObserver%20%26%20computed)%20--------------%0A%2F**%0A%20%20%20*%20Adds%20property%20effects%20for%20each%20argument%20in%20the%20method%20signature%20(and%0A%20%20%20*%20optionally%2C%20for%20the%20method%20name%20if%20%60dynamic%60%20is%20true)%20that%20calls%20the%0A%20%20%20*%20provided%20effect%20function.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BElement%20%7C%20Object%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Type%20of%20property%20effect%20to%20add%0A%20%20%20*%20%40param%20%7BFunction%7D%20effectFn%20Function%20to%20run%20when%20arguments%20change%0A%20%20%20*%20%40param%20%7B*%3D%7D%20methodInfo%20Effect-specific%20information%20to%20be%20included%20in%0A%20%20%20*%20%20%20method%20effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%20Note%2C%0A%20%20%20*%20%20%20defaults%20to%20true%20if%20the%20signature%20is%20static%20(sig.static%20is%20true).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20createMethodEffect(model%2Csig%2Ctype%2CeffectFn%2CmethodInfo%2CdynamicFn)%7BdynamicFn%3Dsig.static%7C%7CdynamicFn%26%26((typeof%20dynamicFn%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(dynamicFn))!%3D%3D'object'%7C%7CdynamicFn%5Bsig.methodName%5D)%3Bvar%20info%3D%7BmethodName%3Asig.methodName%2Cargs%3Asig.args%2CmethodInfo%3AmethodInfo%2CdynamicFn%3AdynamicFn%7D%3Bfor(var%20i%3D0%2Carg%3Bi%3Csig.args.length%26%26(arg%3Dsig.args%5Bi%5D)%3Bi%2B%2B)%7Bif(!arg.literal)%7Bmodel._addPropertyEffect(arg.rootProperty%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%2Ctrigger%3Aarg%7D)%3B%7D%7Dif(dynamicFn)%7Bmodel._addPropertyEffect(sig.methodName%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%7D)%3B%7D%7D%2F**%0A%20%20%20*%20Calls%20a%20method%20with%20arguments%20marshaled%20from%20properties%20on%20the%20instance%0A%20%20%20*%20based%20on%20the%20method%20signature%20contained%20in%20the%20effect%20metadata.%0A%20%20%20*%0A%20%20%20*%20Multi-property%20observers%2C%20computed%20properties%2C%20and%20inline%20computing%0A%20%20%20*%20functions%20call%20this%20function%20to%20invoke%20the%20method%2C%20then%20use%20the%20return%0A%20%20%20*%20value%20accordingly.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20return%20value%20from%20the%20method%20invocation%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Avar%20context%3Dinst._methodHost%7C%7Cinst%3Bvar%20fn%3Dcontext%5Binfo.methodName%5D%3Bif(fn)%7Bvar%20args%3Dinst._marshalArgs(info.args%2Cproperty%2Cprops)%3Breturn%20fn.apply(context%2Cargs)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('method%20%60'%2Binfo.methodName%2B'%60%20not%20defined')%3B%7D%7Dvar%20emptyArray%3D%5B%5D%3B%2F%2F%20Regular%20expressions%20used%20for%20binding%0Avar%20IDENT%3D'(%3F%3A'%2B'%5Ba-zA-Z_%24%5D%5B%5C%5Cw.%3A%24%5C%5C-*%5D*'%2B')'%3Bvar%20NUMBER%3D'(%3F%3A'%2B'%5B-%2B%5D%3F%5B0-9%5D*%5C%5C.%3F%5B0-9%5D%2B(%3F%3A%5BeE%5D%5B-%2B%5D%3F%5B0-9%5D%2B)%3F'%2B')'%3Bvar%20SQUOTE_STRING%3D'(%3F%3A'%2B'%5C'(%3F%3A%5B%5E%5C'%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%5C''%2B')'%3Bvar%20DQUOTE_STRING%3D'(%3F%3A'%2B'%22(%3F%3A%5B%5E%22%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%22'%2B')'%3Bvar%20STRING%3D'(%3F%3A'%2BSQUOTE_STRING%2B'%7C'%2BDQUOTE_STRING%2B')'%3Bvar%20ARGUMENT%3D'(%3F%3A('%2BIDENT%2B'%7C'%2BNUMBER%2B'%7C'%2BSTRING%2B')%5C%5Cs*'%2B')'%3Bvar%20ARGUMENTS%3D'(%3F%3A'%2BARGUMENT%2B'(%3F%3A%2C%5C%5Cs*'%2BARGUMENT%2B')*'%2B')'%3Bvar%20ARGUMENT_LIST%3D'(%3F%3A'%2B'%5C%5C(%5C%5Cs*'%2B'(%3F%3A'%2BARGUMENTS%2B'%3F'%2B')'%2B'%5C%5C)%5C%5Cs*'%2B')'%3Bvar%20BINDING%3D'('%2BIDENT%2B'%5C%5Cs*'%2BARGUMENT_LIST%2B'%3F'%2B')'%3B%2F%2F%20Group%203%0Avar%20OPEN_BRACKET%3D'(%5C%5C%5B%5C%5C%5B%7C%7B%7B)'%2B'%5C%5Cs*'%3Bvar%20CLOSE_BRACKET%3D'(%3F%3A%5D%5D%7C%7D%7D)'%3Bvar%20NEGATE%3D'(%3F%3A(!)%5C%5Cs*)%3F'%3B%2F%2F%20Group%202%0Avar%20EXPRESSION%3DOPEN_BRACKET%2BNEGATE%2BBINDING%2BCLOSE_BRACKET%3Bvar%20bindingRegex%3Dnew%20RegExp(EXPRESSION%2C%22g%22)%3B%2F**%0A%20%20%20*%20Create%20a%20string%20from%20binding%20parts%20of%20all%20the%20literal%20parts%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3CBindingPart%3E%7D%20parts%20All%20parts%20to%20stringify%0A%20%20%20*%20%40return%20%7Bstring%7D%20String%20made%20from%20the%20literal%20parts%0A%20%20%20*%2Ffunction%20literalFromParts(parts)%7Bvar%20s%3D''%3Bfor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bvar%20literal%3Dparts%5Bi%5D.literal%3Bs%2B%3Dliteral%7C%7C''%3B%7Dreturn%20s%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20expression%20string%20for%20a%20method%20signature%2C%20and%20returns%20a%20metadata%0A%20%20%20*%20describing%20the%20method%20in%20terms%20of%20%60methodName%60%2C%20%60static%60%20(whether%20all%20the%0A%20%20%20*%20arguments%20are%20literals)%2C%20and%20an%20array%20of%20%60args%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20expression%20The%20expression%20to%20parse%0A%20%20%20*%20%40return%20%7B%3FMethodSignature%7D%20The%20method%20metadata%20object%20if%20a%20method%20expression%20was%0A%20%20%20*%20%20%20found%2C%20otherwise%20%60undefined%60%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseMethod(expression)%7B%2F%2F%20tries%20to%20match%20valid%20javascript%20property%20names%0Avar%20m%3Dexpression.match(%2F(%5B%5E%5Cs%5D%2B%3F)%5C((%5B%5Cs%5CS%5D*)%5C)%2F)%3Bif(m)%7Bvar%20methodName%3Dm%5B1%5D%3Bvar%20sig%3D%7BmethodName%3AmethodName%2Cstatic%3Atrue%2Cargs%3AemptyArray%7D%3Bif(m%5B2%5D.trim())%7B%2F%2F%20replace%20escaped%20commas%20with%20comma%20entity%2C%20split%20on%20un-escaped%20commas%0Avar%20args%3Dm%5B2%5D.replace(%2F%5C%5C%2C%2Fg%2C'%26comma%3B').split('%2C')%3Breturn%20parseArgs(args%2Csig)%3B%7Delse%7Breturn%20sig%3B%7D%7Dreturn%20null%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20array%20of%20arguments%20and%20sets%20the%20%60args%60%20property%20of%20the%20supplied%0A%20%20%20*%20signature%20metadata%20object.%20Sets%20the%20%60static%60%20property%20to%20false%20if%20any%0A%20%20%20*%20argument%20is%20a%20non-literal.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3Cstring%3E%7D%20argList%20Array%20of%20argument%20names%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%20object%0A%20%20%20*%20%40return%20%7B!MethodSignature%7D%20The%20updated%20signature%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArgs(argList%2Csig)%7Bsig.args%3DargList.map(function(rawArg)%7Bvar%20arg%3DparseArg(rawArg)%3Bif(!arg.literal)%7Bsig.static%3Dfalse%3B%7Dreturn%20arg%3B%7D%2Cthis)%3Breturn%20sig%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20individual%20argument%2C%20and%20returns%20an%20argument%20metadata%20object%0A%20%20%20*%20with%20the%20following%20fields%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%7B%0A%20%20%20*%20%20%20%20%20value%3A%20'prop'%2C%20%20%20%20%20%20%20%20%2F%2F%20property%2Fpath%20or%20literal%20value%0A%20%20%20*%20%20%20%20%20literal%3A%20false%2C%20%20%20%20%20%20%20%2F%2F%20whether%20argument%20is%20a%20literal%0A%20%20%20*%20%20%20%20%20structured%3A%20false%2C%20%20%20%20%2F%2F%20whether%20the%20property%20is%20a%20path%0A%20%20%20*%20%20%20%20%20rootProperty%3A%20'prop'%2C%20%2F%2F%20the%20root%20property%20of%20the%20path%0A%20%20%20*%20%20%20%20%20wildcard%3A%20false%20%20%20%20%20%20%20%2F%2F%20whether%20the%20argument%20was%20a%20wildcard%20'.*'%20path%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20rawArg%20The%20string%20value%20of%20the%20argument%0A%20%20%20*%20%40return%20%7B!MethodArg%7D%20Argument%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArg(rawArg)%7B%2F%2F%20clean%20up%20whitespace%0Avar%20arg%3DrawArg.trim()%2F%2F%20replace%20comma%20entity%20with%20comma%0A.replace(%2F%26comma%3B%2Fg%2C'%2C')%2F%2F%20repair%20extra%20escape%20sequences%3B%20note%20only%20commas%20strictly%20need%0A%2F%2F%20escaping%2C%20but%20we%20allow%20any%20other%20char%20to%20be%20escaped%20since%20its%0A%2F%2F%20likely%20users%20will%20do%20this%0A.replace(%2F%5C%5C(.)%2Fg%2C'%5C%241')%3B%2F%2F%20basic%20argument%20descriptor%0Avar%20a%3D%7Bname%3Aarg%2Cvalue%3A''%2Cliteral%3Afalse%7D%3B%2F%2F%20detect%20literal%20value%20(must%20be%20String%20or%20Number)%0Avar%20fc%3Darg%5B0%5D%3Bif(fc%3D%3D%3D'-')%7Bfc%3Darg%5B1%5D%3B%7Dif(fc%3E%3D'0'%26%26fc%3C%3D'9')%7Bfc%3D'%23'%3B%7Dswitch(fc)%7Bcase%22'%22%3Acase'%22'%3Aa.value%3Darg.slice(1%2C-1)%3Ba.literal%3Dtrue%3Bbreak%3Bcase'%23'%3Aa.value%3DNumber(arg)%3Ba.literal%3Dtrue%3Bbreak%3B%7D%2F%2F%20if%20not%20literal%2C%20look%20for%20structured%20path%0Aif(!a.literal)%7Ba.rootProperty%3DPolymer.Path.root(arg)%3B%2F%2F%20detect%20structured%20path%20(has%20dots)%0Aa.structured%3DPolymer.Path.isPath(arg)%3Bif(a.structured)%7Ba.wildcard%3Darg.slice(-2)%3D%3D'.*'%3Bif(a.wildcard)%7Ba.name%3Darg.slice(0%2C-2)%3B%7D%7D%7Dreturn%20a%3B%7D%2F%2F%20data%20api%0A%2F**%0A%20%20%20*%20Sends%20array%20splice%20notifications%20(%60.splices%60%20and%20%60.length%60)%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20_notifySplices(inst%2Carray%2Cpath%2Csplices)%7Bvar%20splicesPath%3Dpath%2B'.splices'%3Binst.notifyPath(splicesPath%2C%7BindexSplices%3Asplices%7D)%3Binst.notifyPath(path%2B'.length'%2Carray.length)%3B%2F%2F%20Null%20here%20to%20allow%20potentially%20large%20splice%20records%20to%20be%20GC'ed.%0Ainst.__data%5BsplicesPath%5D%3D%7BindexSplices%3Anull%7D%3B%7D%2F**%0A%20%20%20*%20Creates%20a%20splice%20record%20and%20sends%20an%20array%20splice%20notification%20for%0A%20%20%20*%20the%20described%20mutation%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20at%20which%20the%20array%20mutation%20occurred%0A%20%20%20*%20%40param%20%7Bnumber%7D%20addedCount%20Number%20of%20added%20items%0A%20%20%20*%20%40param%20%7BArray%7D%20removed%20Array%20of%20removed%20items%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifySplice(inst%2Carray%2Cpath%2Cindex%2CaddedCount%2Cremoved)%7B_notifySplices(inst%2Carray%2Cpath%2C%5B%7Bindex%3Aindex%2CaddedCount%3AaddedCount%2Cremoved%3Aremoved%2Cobject%3Aarray%2Ctype%3A'splice'%7D%5D)%3B%7D%2F**%0A%20%20%20*%20Returns%20an%20upper-cased%20version%20of%20the%20string.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20String%20to%20uppercase%0A%20%20%20*%20%40return%20%7Bstring%7D%20Uppercased%20string%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20upper(name)%7Breturn%20name%5B0%5D.toUpperCase()%2Bname.substring(1)%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%20template%0A%20%20%20*%20binding%20and%20data%20observation%20(collectively%2C%20%22property%20effects%22)%20system.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20uses%20provides%20the%20following%20key%20static%20methods%20for%20adding%0A%20%20%20*%20property%20effects%20to%20an%20element%20class%3A%0A%20%20%20*%20-%20%60addPropertyEffect%60%0A%20%20%20*%20-%20%60createPropertyObserver%60%0A%20%20%20*%20-%20%60createMethodObserver%60%0A%20%20%20*%20-%20%60createNotifyingProperty%60%0A%20%20%20*%20-%20%60createReadOnlyProperty%60%0A%20%20%20*%20-%20%60createReflectedProperty%60%0A%20%20%20*%20-%20%60createComputedProperty%60%0A%20%20%20*%20-%20%60bindTemplate%60%0A%20%20%20*%0A%20%20%20*%20Each%20method%20creates%20one%20or%20more%20property%20accessors%2C%20along%20with%20metadata%0A%20%20%20*%20used%20by%20this%20mixin's%20implementation%20of%20%60_propertiesChanged%60%20to%20perform%0A%20%20%20*%20the%20property%20effects.%0A%20%20%20*%0A%20%20%20*%20Underscored%20versions%20of%20the%20above%20methods%20also%20exist%20on%20the%20element%0A%20%20%20*%20prototype%20for%20adding%20property%20effects%20on%20instances%20at%20runtime.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20this%20mixin%20overrides%20several%20%60PropertyAccessors%60%20methods%2C%20in%0A%20%20%20*%20many%20cases%20to%20maintain%20guarantees%20provided%20by%20the%20Polymer%201.x%20features%3B%0A%20%20%20*%20notably%20it%20changes%20property%20accessors%20to%20be%20synchronous%20by%20default%0A%20%20%20*%20whereas%20the%20default%20when%20using%20%60PropertyAccessors%60%20standalone%20is%20to%20be%0A%20%20%20*%20async%20by%20default.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.TemplateStamp%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%0A%20%20%20*%20template%20binding%20and%20data%20observation%20system.%0A%20%20%20*%2FPolymer.PropertyEffects%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20propertyEffectsBase%3DPolymer.TemplateStamp(Polymer.PropertyAccessors(superClass))%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BpropertyEffectsBase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyEffects%3Dfunction(_propertyEffectsBase)%7B_inherits(PropertyEffects%2C_propertyEffectsBase)%3Bfunction%20PropertyEffects()%7B_classCallCheck(this%2CPropertyEffects)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F%2F%2F%20Used%20to%20identify%20users%20of%20this%20mixin%2C%20ala%20instanceof%0Avar%20_this%3D_possibleConstructorReturn(this%2C(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)).call(this))%3B_this.__isPropertyEffectsClient%3Dtrue%3B%2F**%20%40type%20%7Bnumber%7D%20*%2F%2F%2F%20NOTE%3A%20used%20to%20track%20re-entrant%20calls%20to%20%60_flushProperties%60%0A%2F%2F%20path%20changes%20dirty%20check%20against%20%60__dataTemp%60%20only%20during%20one%20%22turn%22%0A%2F%2F%20and%20are%20cleared%20when%20%60__dataCounter%60%20returns%20to%200.%0A_this.__dataCounter%3D0%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsReady%3B%2F**%20%40type%20%7BArray%7D%20*%2F_this.__dataPendingClients%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataToNotify%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataLinkedPaths%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataHasPaths%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataCompoundStorage%3B%2F**%20%40type%20%7BPolymer_PropertyEffects%7D%20*%2F_this.__dataHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataTemp%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsInitialized%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__data%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataPending%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataOld%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__computeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__reflectEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__notifyEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__propagateEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__observeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__readOnly%3B%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2F_this.__templateInfo%3Breturn%20_this%3B%7D_createClass(PropertyEffects%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3BhostStack.registerHost(this)%3Bthis.__dataClientsReady%3Dfalse%3Bthis.__dataPendingClients%3Dnull%3Bthis.__dataToNotify%3Dnull%3Bthis.__dataLinkedPaths%3Dnull%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20May%20be%20set%20on%20instance%20prior%20to%20upgrade%0Athis.__dataCompoundStorage%3Dthis.__dataCompoundStorage%7C%7Cnull%3Bthis.__dataHost%3Dthis.__dataHost%7C%7Cnull%3Bthis.__dataTemp%3D%7B%7D%3Bthis.__dataClientsInitialized%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20provide%20a%0A%20%20%20%20%20%20%20*%20more%20efficient%20implementation%20of%20initializing%20properties%20from%0A%20%20%20%20%20%20%20*%20the%20prototype%20on%20the%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bthis.__data%3DObject.create(props)%3Bthis.__dataPending%3DObject.create(props)%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20avoid%20setting%0A%20%20%20%20%20%20%20*%20%60_setProperty%60's%20%60shouldNotify%3A%20true%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20instance%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7Bvar%20readOnly%3Dthis%5BTYPES.READ_ONLY%5D%3Bfor(var%20prop%20in%20props)%7Bif(!readOnly%7C%7C!readOnly%5Bprop%5D)%7Bthis.__dataPending%3Dthis.__dataPending%7C%7C%7B%7D%3Bthis.__dataOld%3Dthis.__dataOld%7C%7C%7B%7D%3Bthis.__data%5Bprop%5D%3Dthis.__dataPending%5Bprop%5D%3Dprops%5Bprop%5D%3B%7D%7D%7D%2F%2F%20Prototype%20setup%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60addPropertyEffect%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyEffect'%2Cvalue%3Afunction%20_addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis._createPropertyAccessor(property%2Ctype%3D%3DTYPES.READ_ONLY)%3B%2F%2F%20effects%20are%20accumulated%20into%20arrays%20per%20property%20based%20on%20type%0Avar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bif(!effects)%7Beffects%3Dthis%5Btype%5D%5Bproperty%5D%3D%5B%5D%3B%7Deffects.push(effect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20the%20given%20property%20effect.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20the%20effect%20was%20associated%20with%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removePropertyEffect'%2Cvalue%3Afunction%20_removePropertyEffect(property%2Ctype%2Ceffect)%7Bvar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bvar%20idx%3Deffects.indexOf(effect)%3Bif(idx%3E%3D0)%7Beffects.splice(idx%2C1)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20property%20effect%0A%20%20%20%20%20%20%20*%20of%20a%20certain%20type.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasPropertyEffect'%2Cvalue%3Afunction%20_hasPropertyEffect(property%2Ctype)%7Bvar%20effects%3Dthis%5Btype%5D%3Breturn%20Boolean(effects%26%26effects%5Bproperty%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22read%20only%22%0A%20%20%20%20%20%20%20*%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReadOnlyEffect'%2Cvalue%3Afunction%20_hasReadOnlyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.READ_ONLY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22notify%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasNotifyEffect'%2Cvalue%3Afunction%20_hasNotifyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.NOTIFY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22reflect%20to%20attribute%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReflectEffect'%2Cvalue%3Afunction%20_hasReflectEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.REFLECT)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22computed%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasComputedEffect'%2Cvalue%3Afunction%20_hasComputedEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.COMPUTE)%3B%7D%2F%2F%20Runtime%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20pending%20property%20or%20path.%20%20If%20the%20root%20property%20of%20the%20path%20in%0A%20%20%20%20%20%20%20*%20question%20had%20no%20accessor%2C%20the%20path%20is%20set%2C%20otherwise%20it%20is%20enqueued%0A%20%20%20%20%20%20%20*%20via%20%60_setPendingProperty%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20isolates%20relatively%20expensive%20functionality%20necessary%0A%20%20%20%20%20%20%20*%20for%20the%20public%20API%20(%60set%60%2C%20%60setProperties%60%2C%20%60notifyPath%60%2C%20and%20property%0A%20%20%20%20%20%20%20*%20change%20listeners%20via%20%7B%7B...%7D%7D%20bindings)%2C%20such%20that%20it%20is%20only%20done%0A%20%20%20%20%20%20%20*%20when%20paths%20enter%20the%20system%2C%20and%20not%20at%20every%20propagation%20step.%20%20It%0A%20%20%20%20%20%20%20*%20also%20sets%20a%20%60__dataHasPaths%60%20flag%20on%20the%20instance%20which%20is%20used%20to%0A%20%20%20%20%20%20%20*%20fast-path%20slower%20path-matching%20code%20in%20the%20property%20effects%20host%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60path%60%20can%20be%20a%20path%20string%20or%20array%20of%20path%20parts%20as%20accepted%20by%20the%0A%20%20%20%20%20%20%20*%20public%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20Set%20to%20true%20if%20this%20change%20should%0A%20%20%20%20%20%20%20*%20%20cause%20a%20property%20notification%20event%20dispatch%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20isPathNotification%20If%20the%20path%20being%20set%20is%20a%20path%0A%20%20%20%20%20%20%20*%20%20%20notification%20of%20an%20already%20changed%20value%2C%20as%20opposed%20to%20a%20request%0A%20%20%20%20%20%20%20*%20%20%20to%20set%20and%20notify%20the%20change.%20%20In%20the%20latter%20%60false%60%20case%2C%20a%20dirty%0A%20%20%20%20%20%20%20*%20%20%20check%20is%20performed%20and%20then%20the%20value%20is%20set%20to%20the%20path%20before%0A%20%20%20%20%20%20%20*%20%20%20enqueuing%20the%20pending%20property%20change.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%2Fpath%20was%20enqueued%20in%0A%20%20%20%20%20%20%20*%20%20%20the%20pending%20changes%20bag.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingPropertyOrPath'%2Cvalue%3Afunction%20_setPendingPropertyOrPath(path%2Cvalue%2CshouldNotify%2CisPathNotification)%7Bif(isPathNotification%7C%7CPolymer.Path.root(Array.isArray(path)%3Fpath%5B0%5D%3Apath)!%3D%3Dpath)%7B%2F%2F%20Dirty%20check%20changes%20being%20set%20to%20a%20path%20against%20the%20actual%20object%2C%0A%2F%2F%20since%20this%20is%20the%20entry%20point%20for%20paths%20into%20the%20system%3B%20from%20here%0A%2F%2F%20the%20only%20dirty%20checks%20are%20against%20the%20%60__dataTemp%60%20cache%20to%20prevent%0A%2F%2F%20duplicate%20work%20in%20the%20same%20turn%20only.%20Note%2C%20if%20this%20was%20a%20notification%0A%2F%2F%20of%20a%20change%20already%20set%20to%20a%20path%20(isPathNotification%3A%20true)%2C%0A%2F%2F%20we%20always%20let%20the%20change%20through%20and%20skip%20the%20%60set%60%20since%20it%20was%0A%2F%2F%20already%20dirty%20checked%20at%20the%20point%20of%20entry%20and%20the%20underlying%0A%2F%2F%20object%20has%20already%20been%20updated%0Aif(!isPathNotification)%7Bvar%20old%3DPolymer.Path.get(this%2Cpath)%3Bpath%3D%2F**%20%40type%20%7Bstring%7D%20*%2FPolymer.Path.set(this%2Cpath%2Cvalue)%3B%2F%2F%20Use%20property-accessor's%20simpler%20dirty%20check%0Aif(!path%7C%7C!_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_shouldPropertyChange'%2Cthis).call(this%2Cpath%2Cvalue%2Cold))%7Breturn%20false%3B%7D%7Dthis.__dataHasPaths%3Dtrue%3Bif(this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify))%7BcomputeLinkedPaths(this%2Cpath%2Cvalue)%3Breturn%20true%3B%7D%7Delse%7Bif(this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bpath%5D)%7Breturn%20this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify)%3B%7Delse%7Bthis%5Bpath%5D%3Dvalue%3B%7D%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Applies%20a%20value%20to%20a%20non-Polymer%20element%2Fnode's%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20implementation%20makes%20a%20best-effort%20at%20binding%20interop%3A%0A%20%20%20%20%20%20%20*%20Some%20native%20element%20properties%20have%20side-effects%20when%0A%20%20%20%20%20%20%20*%20re-setting%20the%20same%20value%20(e.g.%20setting%20%60%3Cinput%3E.value%60%20resets%20the%0A%20%20%20%20%20%20%20*%20cursor%20position)%2C%20so%20we%20do%20a%20dirty-check%20before%20setting%20the%20value.%0A%20%20%20%20%20%20%20*%20However%2C%20for%20better%20interop%20with%20non-Polymer%20custom%20elements%20that%0A%20%20%20%20%20%20%20*%20accept%20objects%2C%20we%20explicitly%20re-set%20object%20changes%20coming%20from%20the%0A%20%20%20%20%20%20%20*%20Polymer%20world%20(which%20may%20include%20deep%20object%20changes%20without%20the%0A%20%20%20%20%20%20%20*%20top%20reference%20changing)%2C%20erring%20on%20the%20side%20of%20providing%20more%0A%20%20%20%20%20%20%20*%20information.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20provide%20alternate%20approaches.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7B%2F%2F%20It%20is%20a%20judgment%20call%20that%20resetting%20primitives%20is%0A%2F%2F%20%22bad%22%20and%20resettings%20objects%20is%20also%20%22good%22%3B%20alternatively%20we%20could%0A%2F%2F%20implement%20a%20whitelist%20of%20tag%20%26%20property%20values%20that%20should%20never%0A%2F%2F%20be%20reset%20(e.g.%20%3Cinput%3E.value%20%26%26%20%3Cselect%3E.value)%0Aif(value!%3D%3Dnode%5Bprop%5D%7C%7C(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D'object')%7Bnode%5Bprop%5D%3Dvalue%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20%60PropertiesChanged%60%20implementation%20to%20introduce%20special%0A%20%20%20%20%20%20%20*%20dirty%20check%20logic%20depending%20on%20the%20property%20%26%20value%20being%20set%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20Any%20value%20set%20to%20a%20path%20(e.g.%20'obj.prop'%3A%2042%20or%20'obj.prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%2C%20dirty%20checked%20against%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%202.%20Object%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%20and%20%60__data%60%2C%20dirty%20checked%20against%0A%20%20%20%20%20%20%20*%20%20%20%20%60__dataTemp%60%20by%20default%20implementation%20of%20%60_shouldPropertyChange%60%0A%20%20%20%20%20%20%20*%203.%20Primitive%20value%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%2042)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__data%60%2C%20dirty%20checked%20against%20%60__data%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20dirty-check%20is%20important%20to%20prevent%20cycles%20due%20to%20two-way%0A%20%20%20%20%20%20%20*%20notification%2C%20but%20paths%20and%20objects%20are%20only%20dirty%20checked%20against%20any%0A%20%20%20%20%20%20%20*%20previous%20value%20set%20during%20this%20turn%20via%20a%20%22temporary%20cache%22%20that%20is%0A%20%20%20%20%20%20%20*%20cleared%20when%20the%20last%20%60_propertiesChanged%60%20exits.%20This%20is%20so%3A%0A%20%20%20%20%20%20%20*%20a.%20any%20cached%20array%20paths%20(e.g.%20'array.3.prop')%20may%20be%20invalidated%0A%20%20%20%20%20%20%20*%20%20%20%20due%20to%20array%20mutations%20like%20shift%2Funshift%2Fsplice%3B%20this%20is%20fine%0A%20%20%20%20%20%20%20*%20%20%20%20since%20path%20changes%20are%20dirty-checked%20at%20user%20entry%20points%20like%20%60set%60%0A%20%20%20%20%20%20%20*%20b.%20dirty-checking%20for%20objects%20only%20lasts%20one%20turn%20to%20allow%20the%20user%0A%20%20%20%20%20%20%20*%20%20%20%20to%20mutate%20the%20object%20in-place%20and%20re-set%20it%20with%20the%20same%20identity%0A%20%20%20%20%20%20%20*%20%20%20%20and%20have%20all%20sub-properties%20re-propagated%20in%20a%20subsequent%20turn.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20temp%20cache%20is%20not%20necessarily%20sufficient%20to%20prevent%20invalid%20array%0A%20%20%20%20%20%20%20*%20paths%2C%20since%20a%20splice%20can%20happen%20during%20the%20same%20turn%20(with%20pathological%0A%20%20%20%20%20%20%20*%20user%20code)%3B%20we%20could%20introduce%20a%20%22fixup%22%20for%20temporarily%20cached%20array%0A%20%20%20%20%20%20%20*%20paths%20if%20needed%3A%20https%3A%2F%2Fgithub.com%2FPolymer%2Fpolymer%2Fissues%2F4227%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20True%20if%20property%20should%20fire%20notification%0A%20%20%20%20%20%20%20*%20%20%20event%20(applies%20only%20for%20%60notify%3A%20true%60%20properties)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2CshouldNotify)%7Bvar%20isPath%3Dthis.__dataHasPaths%26%26Polymer.Path.isPath(property)%3Bvar%20prevProps%3DisPath%3Fthis.__dataTemp%3Athis.__data%3Bif(this._shouldPropertyChange(property%2Cvalue%2CprevProps%5Bproperty%5D))%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dthis.__data%5Bproperty%5D%3B%7D%2F%2F%20Paths%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%20turn)%2C%0A%2F%2F%20which%20is%20used%20for%20dirty-checking%2C%20all%20others%20stored%20in%20__data%0Aif(isPath)%7Bthis.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Delse%7Bthis.__data%5Bproperty%5D%3Dvalue%3B%7D%2F%2F%20All%20changes%20go%20into%20pending%20property%20bag%2C%20passed%20to%20_propertiesChanged%0Athis.__dataPending%5Bproperty%5D%3Dvalue%3B%2F%2F%20Track%20properties%20that%20should%20notify%20separately%0Aif(isPath%7C%7Cthis%5BTYPES.NOTIFY%5D%26%26this%5BTYPES.NOTIFY%5D%5Bproperty%5D)%7Bthis.__dataToNotify%3Dthis.__dataToNotify%7C%7C%7B%7D%3Bthis.__dataToNotify%5Bproperty%5D%3DshouldNotify%3B%7Dreturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20base%20implementation%20to%20ensure%20all%20accessors%20set%20%60shouldNotify%60%0A%20%20%20%20%20%20%20*%20to%20true%2C%20for%20per-property%20notification%20tracking.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessor%60's%20default%20async%20queuing%20of%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%3A%20if%20%60__dataReady%60%20is%20false%20(has%20not%20yet%20been%0A%20%20%20%20%20%20%20*%20manually%20flushed)%2C%20the%20function%20no-ops%3B%20otherwise%20flushes%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20synchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bif(this.__dataReady)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20the%20given%20client%20on%20a%20list%20of%20pending%20clients%2C%20whose%0A%20%20%20%20%20%20%20*%20pending%20property%20changes%20can%20later%20be%20flushed%20via%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60_flushClients%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20client%20PropertyEffects%20client%20to%20enqueue%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enqueueClient'%2Cvalue%3Afunction%20_enqueueClient(client)%7Bthis.__dataPendingClients%3Dthis.__dataPendingClients%7C%7C%5B%5D%3Bif(client!%3D%3Dthis)%7Bthis.__dataPendingClients.push(client)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20superclass%20implementation.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bthis.__dataCounter%2B%2B%3B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_flushProperties'%2Cthis).call(this)%3Bthis.__dataCounter--%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Flushes%20any%20clients%20previously%20enqueued%20via%20%60_enqueueClient%60%2C%20causing%0A%20%20%20%20%20%20%20*%20their%20%60_flushProperties%60%20method%20to%20run.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushClients'%2Cvalue%3Afunction%20_flushClients()%7Bif(!this.__dataClientsReady)%7Bthis.__dataClientsReady%3Dtrue%3Bthis._readyClients()%3B%2F%2F%20Override%20point%20where%20accessors%20are%20turned%20on%3B%20importantly%2C%0A%2F%2F%20this%20is%20after%20clients%20have%20fully%20readied%2C%20providing%20a%20guarantee%0A%2F%2F%20that%20any%20property%20effects%20occur%20only%20after%20all%20clients%20are%20ready.%0Athis.__dataReady%3Dtrue%3B%7Delse%7Bthis.__enableOrFlushClients()%3B%7D%7D%2F%2F%20NOTE%3A%20We%20ensure%20clients%20either%20enable%20or%20flush%20as%20appropriate.%20This%0A%2F%2F%20handles%20two%20corner%20cases%3A%0A%2F%2F%20(1)%20clients%20flush%20properly%20when%20connected%2Fenabled%20before%20the%20host%0A%2F%2F%20enables%3B%20e.g.%0A%2F%2F%20%20%20(a)%20Templatize%20stamps%20with%20no%20properties%20and%20does%20not%20flush%20and%0A%2F%2F%20%20%20(b)%20the%20instance%20is%20inserted%20into%20dom%20and%0A%2F%2F%20%20%20(c)%20then%20the%20instance%20flushes.%0A%2F%2F%20(2)%20clients%20enable%20properly%20when%20not%20connected%2Fenabled%20when%20the%20host%0A%2F%2F%20flushes%3B%20e.g.%0A%2F%2F%20%20%20(a)%20a%20template%20is%20runtime%20stamped%20and%20not%20yet%20connected%2Fenabled%0A%2F%2F%20%20%20(b)%20a%20host%20sets%20a%20property%2C%20causing%20stamped%20dom%20to%20flush%0A%2F%2F%20%20%20(c)%20the%20stamped%20dom%20enables.%0A%7D%2C%7Bkey%3A'__enableOrFlushClients'%2Cvalue%3Afunction%20__enableOrFlushClients()%7Bvar%20clients%3Dthis.__dataPendingClients%3Bif(clients)%7Bthis.__dataPendingClients%3Dnull%3Bfor(var%20i%3D0%3Bi%3Cclients.length%3Bi%2B%2B)%7Bvar%20client%3Dclients%5Bi%5D%3Bif(!client.__dataEnabled)%7Bclient._enableProperties()%3B%7Delse%20if(client.__dataPending)%7Bclient._flushProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Perform%20any%20initial%20setup%20on%20client%20dom.%20Called%20before%20the%20first%0A%20%20%20%20%20%20%20*%20%60_flushProperties%60%20call%20on%20client%20dom%20and%20before%20any%20element%0A%20%20%20%20%20%20%20*%20observers%20are%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bthis.__enableOrFlushClients()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20bag%20of%20property%20changes%20to%20this%20instance%2C%20and%0A%20%20%20%20%20%20%20*%20synchronously%20processes%20all%20effects%20of%20the%20properties%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Property%20names%20must%20be%20simple%20properties%2C%20not%20paths.%20%20Batched%0A%20%20%20%20%20%20%20*%20path%20propagation%20is%20not%20supported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20one%20or%20more%20key-value%20pairs%20whose%20key%20is%0A%20%20%20%20%20%20%20*%20%20%20a%20property%20and%20value%20is%20the%20new%20value%20to%20set%20for%20that%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setReadOnly%20When%20true%2C%20any%20private%20values%20set%20in%0A%20%20%20%20%20%20%20*%20%20%20%60props%60%20will%20be%20set.%20By%20default%2C%20%60setProperties%60%20will%20not%20set%0A%20%20%20%20%20%20%20*%20%20%20%60readOnly%3A%20true%60%20root%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setProperties'%2Cvalue%3Afunction%20setProperties(props%2CsetReadOnly)%7Bfor(var%20path%20in%20props)%7Bif(setReadOnly%7C%7C!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5Bpath%5D)%7B%2F%2FTODO(kschaaf)%3A%20explicitly%20disallow%20paths%20in%20setProperty%3F%0A%2F%2F%20wildcard%20observers%20currently%20only%20pass%20the%20first%20changed%20path%0A%2F%2F%20in%20the%20%60info%60%20object%2C%20and%20you%20could%20do%20some%20odd%20things%20batching%0A%2F%2F%20paths%2C%20e.g.%20%7B'foo.bar'%3A%20%7B...%7D%2C%20'foo'%3A%20null%7D%0Athis._setPendingPropertyOrPath(path%2Cprops%5Bpath%5D%2Ctrue)%3B%7D%7Dthis._invalidateProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20so%20that%20property%20accessor%0A%20%20%20%20%20%20%20*%20side%20effects%20are%20not%20enabled%20until%20after%20client%20dom%20is%20fully%20ready.%0A%20%20%20%20%20%20%20*%20Also%20calls%20%60_flushClients%60%20callback%20to%20ensure%20client%20dom%20is%20enabled%0A%20%20%20%20%20%20%20*%20that%20was%20not%20enabled%20as%20a%20result%20of%20flushing%20properties.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B%2F%2F%20It%20is%20important%20that%20%60super.ready()%60%20is%20not%20called%20here%20as%20it%0A%2F%2F%20immediately%20turns%20on%20accessors.%20Instead%2C%20we%20wait%20until%20%60readyClients%60%0A%2F%2F%20to%20enable%20accessors%20to%20provide%20a%20guarantee%20that%20clients%20are%20ready%0A%2F%2F%20before%20processing%20any%20accessors%20side%20effects.%0Athis._flushProperties()%3B%2F%2F%20If%20no%20data%20was%20pending%2C%20%60_flushProperties%60%20will%20not%20%60flushClients%60%0A%2F%2F%20so%20ensure%20this%20is%20done.%0Aif(!this.__dataClientsReady)%7Bthis._flushClients()%3B%7D%2F%2F%20Before%20ready%2C%20client%20notifications%20do%20not%20trigger%20_flushProperties.%0A%2F%2F%20Therefore%20a%20flush%20is%20necessary%20here%20if%20data%20has%20been%20set.%0Aif(this.__dataPending)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyAccessors%60's%20properties%20changed%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Runs%20each%20class%20of%20effects%20for%20the%20batch%20of%20changed%20properties%20in%0A%20%20%20%20%20%20%20*%20a%20specific%20order%20(compute%2C%20propagate%2C%20reflect%2C%20observe%2C%20notify).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20----------------------------%0A%2F%2F%20let%20c%20%3D%20Object.getOwnPropertyNames(changedProps%20%7C%7C%20%7B%7D)%3B%0A%2F%2F%20window.debug%20%26%26%20console.group(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20if%20(window.debug)%20%7B%20debugger%3B%20%7D%0A%2F%2F%20----------------------------%0Avar%20hasPaths%3Dthis.__dataHasPaths%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20Compute%20properties%0ArunComputedEffects(this%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Clear%20notify%20properties%20prior%20to%20possible%20reentry%20(propagate%2C%20observe)%2C%0A%2F%2F%20but%20after%20computing%20effects%20have%20a%20chance%20to%20add%20to%20them%0Avar%20notifyProps%3Dthis.__dataToNotify%3Bthis.__dataToNotify%3Dnull%3B%2F%2F%20Propagate%20properties%20to%20clients%0Athis._propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Flush%20clients%0Athis._flushClients()%3B%2F%2F%20Reflect%20properties%0ArunEffects(this%2Cthis%5BTYPES.REFLECT%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Observe%20properties%0ArunEffects(this%2Cthis%5BTYPES.OBSERVE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Notify%20properties%20to%20host%0Aif(notifyProps)%7BrunNotifyEffects(this%2CnotifyProps%2CchangedProps%2ColdProps%2ChasPaths)%3B%7D%2F%2F%20Clear%20temporary%20cache%20at%20end%20of%20turn%0Aif(this.__dataCounter%3D%3D1)%7Bthis.__dataTemp%3D%7B%7D%3B%7D%2F%2F%20----------------------------%0A%2F%2F%20window.debug%20%26%26%20console.groupEnd(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20----------------------------%0A%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20propagate%20any%20property%20changes%20to%20stamped%20template%20nodes%0A%20%20%20%20%20%20%20*%20managed%20by%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propagatePropertyChanges'%2Cvalue%3Afunction%20_propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%7Bif(this%5BTYPES.PROPAGATE%5D)%7BrunEffects(this%2Cthis%5BTYPES.PROPAGATE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%7Dvar%20templateInfo%3Dthis.__templateInfo%3Bwhile(templateInfo)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2CchangedProps%2ColdProps%2ChasPaths%2CtemplateInfo.nodeList)%3BtemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Aliases%20one%20data%20path%20as%20another%2C%20such%20that%20path%20notifications%20from%20one%0A%20%20%20%20%20%20%20*%20are%20routed%20to%20the%20other.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20to%20Target%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20from%20Source%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'linkPaths'%2Cvalue%3Afunction%20linkPaths(to%2Cfrom)%7Bto%3DPolymer.Path.normalize(to)%3Bfrom%3DPolymer.Path.normalize(from)%3Bthis.__dataLinkedPaths%3Dthis.__dataLinkedPaths%7C%7C%7B%7D%3Bthis.__dataLinkedPaths%5Bto%5D%3Dfrom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20a%20data%20path%20alias%20previously%20established%20with%20%60_linkPaths%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20the%20path%20to%20unlink%20should%20be%20the%20target%20(%60to%60)%20used%20when%0A%20%20%20%20%20%20%20*%20linking%20the%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Target%20path%20to%20unlink.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlinkPaths'%2Cvalue%3Afunction%20unlinkPaths(path)%7Bpath%3DPolymer.Path.normalize(path)%3Bif(this.__dataLinkedPaths)%7Bdelete%20this.__dataLinkedPaths%5Bpath%5D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20an%20array%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items%20%3D%20%5B%20%7Bname%3A%20'Jim'%7D%2C%20%7Bname%3A%20'Todd'%7D%2C%20%7Bname%3A%20'Bill'%7D%20%5D%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.splice(1%2C%201%2C%20%7Bname%3A%20'Sam'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.push(%7Bname%3A%20'Bob'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifySplices('items'%2C%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%201%2C%20removed%3A%20%5B%7Bname%3A%20'Todd'%7D%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%203%2C%20removed%3A%20%5B%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D)%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%20indicating%20ordered%0A%20%20%20%20%20%20%20*%20%20%20changes%20that%20occurred%20to%20the%20array.%20Each%20record%20should%20have%20the%0A%20%20%20%20%20%20%20*%20%20%20following%20fields%3A%0A%20%20%20%20%20%20%20*%20%20%20%20*%20index%3A%20index%20at%20which%20the%20change%20occurred%0A%20%20%20%20%20%20%20*%20%20%20%20*%20removed%3A%20array%20of%20items%20that%20were%20removed%20from%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20addedCount%3A%20number%20of%20new%20items%20added%20at%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20object%3A%20a%20reference%20to%20the%20array%20in%20question%0A%20%20%20%20%20%20%20*%20%20%20%20*%20type%3A%20the%20string%20literal%20'splice'%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20Note%20that%20splice%20records%20_must_%20be%20normalized%20such%20that%20they%20are%0A%20%20%20%20%20%20%20*%20%20%20reported%20in%20index%20order%20(raw%20results%20from%20%60Object.observe%60%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20ordered%20and%20must%20be%20normalized%2Fmerged%20before%20notifying).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifySplices'%2Cvalue%3Afunction%20notifySplices(path%2Csplices)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B_notifySplices(this%2Carray%2Cinfo.path%2Csplices)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20reading%20a%20value%20from%20a%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20is%20undefined%2C%20this%20method%20returns%0A%20%20%20%20%20%20%20*%20%60undefined%60%20(this%20method%20does%20not%20throw%20when%20dereferencing%20undefined%0A%20%20%20%20%20%20%20*%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20read.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60foo.bar.baz%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60users.12.name%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20the%20path%2C%20or%20%60undefined%60%20if%20any%20part%20of%20the%20path%0A%20%20%20%20%20%20%20*%20%20%20is%20undefined.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'get'%2Cvalue%3Afunction%20get(path%2Croot)%7Breturn%20Polymer.Path.get(root%7C%7Cthis%2Cpath)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20setting%20a%20value%20to%20a%20path%20and%20notifying%20any%0A%20%20%20%20%20%20%20*%20elements%20bound%20to%20the%20same%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20except%20for%20the%20last%20is%20undefined%2C%0A%20%20%20%20%20%20%20*%20this%20method%20does%20nothing%20(this%20method%20does%20not%20throw%20when%0A%20%20%20%20%20%20%20*%20dereferencing%20undefined%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20write.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60'foo.bar.baz'%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60'users.12.name'%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20at%20the%20specified%20path.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%20%20When%20specified%2C%20no%20notification%20will%20occur.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'set'%2Cvalue%3Afunction%20set(path%2Cvalue%2Croot)%7Bif(root)%7BPolymer.Path.set(root%2Cpath%2Cvalue)%3B%7Delse%7Bif(!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5B%2F**%20%40type%20%7Bstring%7D%20*%2Fpath%5D)%7Bif(this._setPendingPropertyOrPath(path%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20end%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20push%20onto%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'push'%2Cvalue%3Afunction%20push(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20len%3Darray.length%3Bfor(var%20_len%3Darguments.length%2Citems%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bitems%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dvar%20ret%3Darray.push.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Clen%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20end%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'pop'%2Cvalue%3Afunction%20pop(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.pop()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2Carray.length%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Starting%20from%20the%20start%20index%20specified%2C%20removes%200%20or%20more%20items%0A%20%20%20%20%20%20%20*%20from%20the%20array%20and%20inserts%200%20or%20more%20new%20items%20in%20their%20place.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.splice%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20start%20Index%20from%20which%20to%20start%20removing%2Finserting.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20deleteCount%20Number%20of%20items%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20into%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20of%20removed%20items.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'splice'%2Cvalue%3Afunction%20splice(path%2Cstart%2CdeleteCount)%7Bfor(var%20_len2%3Darguments.length%2Citems%3DArray(_len2%3E3%3F_len2-3%3A0)%2C_key2%3D3%3B_key2%3C_len2%3B_key2%2B%2B)%7Bitems%5B_key2-3%5D%3Darguments%5B_key2%5D%3B%7Dvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B%2F%2F%20Normalize%20fancy%20native%20splice%20handling%20of%20crazy%20start%20values%0Aif(start%3C0)%7Bstart%3Darray.length-Math.floor(-start)%3B%7Delse%20if(start)%7Bstart%3DMath.floor(start)%3B%7D%2F%2F%20array.splice%20does%20different%20things%20based%20on%20the%20number%20of%20arguments%0A%2F%2F%20you%20pass%20in.%20Therefore%2C%20array.splice(0)%20and%20array.splice(0%2C%20undefined)%0A%2F%2F%20do%20different%20things.%20In%20the%20former%2C%20the%20whole%20array%20is%20cleared.%20In%20the%0A%2F%2F%20latter%2C%20no%20items%20are%20removed.%0A%2F%2F%20This%20means%20that%20we%20need%20to%20detect%20whether%201.%20one%20of%20the%20arguments%0A%2F%2F%20is%20actually%20passed%20in%20and%20then%202.%20determine%20how%20many%20arguments%0A%2F%2F%20we%20should%20pass%20on%20to%20the%20native%20array.splice%0A%2F%2F%0Avar%20ret%3Dvoid%200%3B%2F%2F%20Omit%20any%20additional%20arguments%20if%20they%20were%20not%20passed%20in%0Aif(arguments.length%3D%3D%3D2)%7Bret%3Darray.splice(start)%3B%2F%2F%20Either%20start%20was%20undefined%20and%20the%20others%20were%20defined%2C%20but%20in%20this%0A%2F%2F%20case%20we%20can%20safely%20pass%20on%20all%20arguments%0A%2F%2F%0A%2F%2F%20Note%3A%20this%20includes%20the%20case%20where%20none%20of%20the%20arguments%20were%20passed%20in%2C%0A%2F%2F%20e.g.%20this.splice('array').%20However%2C%20if%20both%20start%20and%20deleteCount%0A%2F%2F%20are%20undefined%2C%20array.splice%20will%20not%20modify%20the%20array%20(as%20expected)%0A%7Delse%7Bret%3Darray.splice.apply(array%2C%5Bstart%2CdeleteCount%5D.concat(items))%3B%7D%2F%2F%20At%20the%20end%2C%20check%20whether%20any%20items%20were%20passed%20in%20(e.g.%20insertions)%0A%2F%2F%20or%20if%20the%20return%20array%20contains%20items%20(e.g.%20deletions).%0A%2F%2F%20Only%20notify%20if%20items%20were%20added%20or%20deleted.%0Aif(items.length%7C%7Cret.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Cstart%2Citems.length%2Cret)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20beginning%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'shift'%2Cvalue%3Afunction%20shift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.shift()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20beginning%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20info%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unshift'%2Cvalue%3Afunction%20unshift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bfor(var%20_len3%3Darguments.length%2Citems%3DArray(_len3%3E1%3F_len3-1%3A0)%2C_key3%3D1%3B_key3%3C_len3%3B_key3%2B%2B)%7Bitems%5B_key3-1%5D%3Darguments%5B_key3%5D%3B%7Dvar%20ret%3Darray.unshift.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20a%20path%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.item.user.name%20%3D%20'Bob'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifyPath('item.user.name')%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Value%20at%20the%20path%20(optional).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyPath'%2Cvalue%3Afunction%20notifyPath(path%2Cvalue)%7B%2F**%20%40type%20%7Bstring%7D%20*%2Fvar%20propPath%3Dvoid%200%3Bif(arguments.length%3D%3D1)%7B%2F%2F%20Get%20value%20if%20not%20supplied%0Avar%20info%3D%7Bpath%3A''%7D%3Bvalue%3DPolymer.Path.get(this%2Cpath%2Cinfo)%3BpropPath%3Dinfo.path%3B%7Delse%20if(Array.isArray(path))%7B%2F%2F%20Normalize%20path%20if%20needed%0ApropPath%3DPolymer.Path.normalize(path)%3B%7Delse%7BpropPath%3D%2F**%20%40type%7Bstring%7D%20*%2Fpath%3B%7Dif(this._setPendingPropertyOrPath(propPath%2Cvalue%2Ctrue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReadOnlyProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReadOnlyProperty'%2Cvalue%3Afunction%20_createReadOnlyProperty(property%2CprotectedSetter)%7Bthis._addPropertyEffect(property%2CTYPES.READ_ONLY)%3Bif(protectedSetter)%7Bthis%5B'_set'%2Bupper(property)%5D%3D%2F**%20%40this%20%7BPropertyEffects%7D%20*%2Ffunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createPropertyObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createPropertyObserver'%2Cvalue%3Afunction%20_createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bvar%20info%3D%7Bproperty%3Aproperty%2Cmethod%3Amethod%2CdynamicFn%3ABoolean(dynamicFn)%7D%3Bthis._addPropertyEffect(property%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Aproperty%7D%7D)%3Bif(dynamicFn)%7Bthis._addPropertyEffect(%2F**%20%40type%20%7Bstring%7D%20*%2Fmethod%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Amethod%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createMethodObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createMethodObserver'%2Cvalue%3Afunction%20_createMethodObserver(expression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20observer%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.OBSERVE%2CrunMethodEffect%2Cnull%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createNotifyingProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createNotifyingProperty'%2Cvalue%3Afunction%20_createNotifyingProperty(property)%7Bthis._addPropertyEffect(property%2CTYPES.NOTIFY%2C%7Bfn%3ArunNotifyEffect%2Cinfo%3A%7BeventName%3ACaseMap.camelToDashCase(property)%2B'-changed'%2Cproperty%3Aproperty%7D%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReflectedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReflectedProperty'%2Cvalue%3Afunction%20_createReflectedProperty(property)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bif(attr%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Property%20'%2Bproperty%2B'%20cannot%20be%20reflected%20to%20attribute%20'%2Battr%2B'%20because%20%22-%22%20is%20not%20a%20valid%20starting%20attribute%20name.%20Use%20a%20lowercase%20first%20letter%20for%20the%20property%20instead.')%3B%7Delse%7Bthis._addPropertyEffect(property%2CTYPES.REFLECT%2C%7Bfn%3ArunReflectEffect%2Cinfo%3A%7BattrName%3Aattr%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createComputedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createComputedProperty'%2Cvalue%3Afunction%20_createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20computed%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.COMPUTE%2CrunComputedEffect%2Cproperty%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20the%20argument%20values%20for%20a%20method%20specified%20in%20the%20provided%20array%0A%20%20%20%20%20%20%20*%20of%20argument%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60path%60%20and%20%60value%60%20arguments%20are%20used%20to%20fill%20in%20wildcard%20descriptor%0A%20%20%20%20%20%20%20*%20when%20the%20method%20is%20being%20called%20as%20a%20result%20of%20a%20path%20notification.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Array%3C!MethodArg%3E%7D%20args%20Array%20of%20argument%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20name%20that%20triggered%20the%20method%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C*%3E%7D%20Array%20of%20argument%20values%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_marshalArgs'%2Cvalue%3Afunction%20_marshalArgs(args%2Cpath%2Cprops)%7Bvar%20data%3Dthis.__data%3Bvar%20values%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dargs.length%3Bi%3Cl%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bvar%20name%3Darg.name%3Bvar%20v%3Dvoid%200%3Bif(arg.literal)%7Bv%3Darg.value%3B%7Delse%7Bif(arg.structured)%7Bv%3DPolymer.Path.get(data%2Cname)%3B%2F%2F%20when%20data%20is%20not%20stored%20e.g.%20%60splices%60%0Aif(v%3D%3D%3Dundefined)%7Bv%3Dprops%5Bname%5D%3B%7D%7Delse%7Bv%3Ddata%5Bname%5D%3B%7D%7Dif(arg.wildcard)%7B%2F%2F%20Only%20send%20the%20actual%20path%20changed%20info%20if%20the%20change%20that%0A%2F%2F%20caused%20the%20observer%20to%20run%20matched%20the%20wildcard%0Avar%20baseChanged%3Dname.indexOf(path%2B'.')%3D%3D%3D0%3Bvar%20matches%3Dpath.indexOf(name)%3D%3D%3D0%26%26!baseChanged%3Bvalues%5Bi%5D%3D%7Bpath%3Amatches%3Fpath%3Aname%2Cvalue%3Amatches%3Fprops%5Bpath%5D%3Av%2Cbase%3Av%7D%3B%7Delse%7Bvalues%5Bi%5D%3Dv%3B%7D%7Dreturn%20values%3B%7D%2F%2F%20--%20static%20class%20methods%20------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20accessor%20exists%20for%20the%20specified%20property%2C%20and%20adds%0A%20%20%20%20%20%20%20*%20to%20a%20list%20of%20%22property%20effects%22%20that%20will%20run%20when%20the%20accessor%20for%0A%20%20%20%20%20%20%20*%20the%20specified%20property%20is%20set.%20%20Effects%20are%20grouped%20by%20%22type%22%2C%20which%0A%20%20%20%20%20%20%20*%20roughly%20corresponds%20to%20a%20phase%20in%20effect%20processing.%20%20The%20effect%0A%20%20%20%20%20%20%20*%20metadata%20should%20be%20in%20the%20following%20form%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20fn%3A%20effectFunction%2C%20%2F%2F%20Reference%20to%20function%20to%20call%20to%20perform%20effect%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20info%3A%20%7B%20...%20%7D%20%20%20%20%20%20%20%2F%2F%20Effect%20metadata%20passed%20to%20function%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20trigger%3A%20%7B%20%20%20%20%20%20%20%20%20%20%2F%2F%20Optional%20triggering%20metadata%3B%20if%20not%20provided%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20name%3A%20string%20%20%20%20%20%20%2F%2F%20the%20property%20is%20treated%20as%20a%20wildcard%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20structured%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20wildcard%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effects%20are%20called%20from%20%60_propertiesChanged%60%20in%20the%20following%20order%20by%0A%20%20%20%20%20%20%20*%20type%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20COMPUTE%0A%20%20%20%20%20%20%20*%202.%20PROPAGATE%0A%20%20%20%20%20%20%20*%203.%20REFLECT%0A%20%20%20%20%20%20%20*%204.%20OBSERVE%0A%20%20%20%20%20%20%20*%205.%20NOTIFY%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effect%20functions%20are%20called%20with%20the%20following%20signature%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20effectFunction(inst%2C%20path%2C%20props%2C%20oldProps%2C%20info%2C%20hasPaths)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_bindTemplate'%2C%2F%2F%20--%20binding%20----------------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60bindTemplate%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20the%20prototype%20(for%20prototypical%20template%0A%20%20%20%20%20%20%20*%20binding%2C%20to%20avoid%20creating%20accessors%20every%20instance)%20once%20per%20prototype%2C%0A%20%20%20%20%20%20%20*%20and%20will%20be%20called%20with%20%60runtimeBinding%3A%20true%60%20by%20%60_stampTemplate%60%20to%0A%20%20%20%20%20%20%20*%20create%20and%20link%20an%20instance%20of%20the%20template%20metadata%20associated%20with%20a%0A%20%20%20%20%20%20%20*%20particular%20stamping.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20instanceBinding%20When%20false%20(default)%2C%20performs%0A%20%20%20%20%20%20%20*%20%20%20%22prototypical%22%20binding%20of%20the%20template%20and%20overwrites%20any%20previously%0A%20%20%20%20%20%20%20*%20%20%20bound%20template%20for%20the%20class.%20When%20true%20(as%20passed%20from%0A%20%20%20%20%20%20%20*%20%20%20%60_stampTemplate%60)%2C%20the%20template%20info%20is%20instanced%20and%20linked%20into%0A%20%20%20%20%20%20%20*%20%20%20the%20list%20of%20bound%20templates.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%3B%20for%20%60runtimeBinding%60%2C%0A%20%20%20%20%20%20%20*%20%20%20this%20is%20an%20instance%20of%20the%20prototypical%20template%20info%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_bindTemplate(template%2CinstanceBinding)%7Bvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20wasPreBound%3Dthis.__templateInfo%3D%3DtemplateInfo%3B%2F%2F%20Optimization%3A%20since%20this%20is%20called%20twice%20for%20proto-bound%20templates%2C%0A%2F%2F%20don't%20attempt%20to%20recreate%20accessors%20if%20this%20template%20was%20pre-bound%0Aif(!wasPreBound)%7Bfor(var%20prop%20in%20templateInfo.propertyEffects)%7Bthis._createPropertyAccessor(prop)%3B%7D%7Dif(instanceBinding)%7B%2F%2F%20For%20instance-time%20binding%2C%20create%20instance%20of%20template%20metadata%0A%2F%2F%20and%20link%20into%20list%20of%20templates%20if%20necessary%0AtemplateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2FObject.create(templateInfo)%3BtemplateInfo.wasPreBound%3DwasPreBound%3Bif(!wasPreBound%26%26this.__templateInfo)%7Bvar%20last%3Dthis.__templateInfoLast%7C%7Cthis.__templateInfo%3Bthis.__templateInfoLast%3Dlast.nextTemplateInfo%3DtemplateInfo%3BtemplateInfo.previousTemplateInfo%3Dlast%3Breturn%20templateInfo%3B%7D%7Dreturn%20this.__templateInfo%3DtemplateInfo%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20a%20property%20effect%20to%20the%20given%20template%20metadata%2C%20which%20is%20run%0A%20%20%20%20%20%20%20*%20at%20the%20%22propagate%22%20stage%20of%20%60_propertiesChanged%60%20when%20the%20template%0A%20%20%20%20%20%20%20*%20has%20been%20bound%20to%20the%20element%20via%20%60_bindTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60effect%60%20object%20should%20match%20the%20format%20in%20%60_addPropertyEffect%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Template%20metadata%20to%20add%20effect%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20provided%20template%20and%20performs%20instance-time%20setup%20for%0A%20%20%20%20%20%20%20*%20Polymer%20template%20features%2C%20including%20data%20bindings%2C%20declarative%20event%0A%20%20%20%20%20%20%20*%20listeners%2C%20and%20the%20%60this.%24%60%20map%20of%20%60id%60's%20to%20nodes.%20%20A%20document%20fragment%0A%20%20%20%20%20%20%20*%20is%20returned%20containing%20the%20stamped%20DOM%2C%20ready%20for%20insertion%20into%20the%0A%20%20%20%20%20%20%20*%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20more%20than%20once%3B%20however%20note%20that%20due%20to%0A%20%20%20%20%20%20%20*%20%60shadycss%60%20polyfill%20limitations%2C%20only%20styles%20from%20templates%20prepared%0A%20%20%20%20%20%20%20*%20using%20%60ShadyCSS.prepareTemplate%60%20will%20be%20correctly%20polyfilled%20(scoped%0A%20%20%20%20%20%20%20*%20to%20the%20shadow%20root%20and%20support%20CSS%20custom%20properties)%2C%20and%20note%20that%0A%20%20%20%20%20%20%20*%20%60ShadyCSS.prepareTemplate%60%20may%20only%20be%20called%20once%20per%20element.%20As%20such%2C%0A%20%20%20%20%20%20%20*%20any%20styles%20required%20by%20in%20runtime-stamped%20templates%20must%20be%20included%0A%20%20%20%20%20%20%20*%20in%20the%20main%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Ensures%20that%20created%20dom%20is%20%60_enqueueClient%60'd%20to%20this%20element%20so%0A%2F%2F%20that%20it%20can%20be%20flushed%20on%20next%20call%20to%20%60_flushProperties%60%0AhostStack.beginHosting(this)%3Bvar%20dom%3D_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_stampTemplate'%2Cthis).call(this%2Ctemplate)%3BhostStack.endHosting(this)%3Bvar%20templateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2Fthis._bindTemplate(template%2Ctrue)%3B%2F%2F%20Add%20template-instance-specific%20data%20to%20instanced%20templateInfo%0AtemplateInfo.nodeList%3Ddom.nodeList%3B%2F%2F%20Capture%20child%20nodes%20to%20allow%20unstamping%20of%20non-prototypical%20templates%0Aif(!templateInfo.wasPreBound)%7Bvar%20nodes%3DtemplateInfo.childNodes%3D%5B%5D%3Bfor(var%20n%3Ddom.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bnodes.push(n)%3B%7D%7Ddom.templateInfo%3DtemplateInfo%3B%2F%2F%20Setup%20compound%20storage%2C%202-way%20listeners%2C%20and%20dataHost%20for%20bindings%0AsetupBindings(this%2CtemplateInfo)%3B%2F%2F%20Flush%20properties%20into%20template%20nodes%20if%20already%20booted%0Aif(this.__dataReady)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2Cthis.__data%2Cnull%2Cfalse%2CtemplateInfo.nodeList)%3B%7Dreturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20and%20unbinds%20the%20nodes%20previously%20contained%20in%20the%20provided%0A%20%20%20%20%20%20%20*%20DocumentFragment%20returned%20from%20%60_stampTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!StampedTemplate%7D%20dom%20DocumentFragment%20previously%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60_stampTemplate%60%20associated%20with%20the%20nodes%20to%20be%20removed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeBoundDom'%2Cvalue%3Afunction%20_removeBoundDom(dom)%7B%2F%2F%20Unlink%20template%20info%0Avar%20templateInfo%3Ddom.templateInfo%3Bif(templateInfo.previousTemplateInfo)%7BtemplateInfo.previousTemplateInfo.nextTemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7Dif(templateInfo.nextTemplateInfo)%7BtemplateInfo.nextTemplateInfo.previousTemplateInfo%3DtemplateInfo.previousTemplateInfo%3B%7Dif(this.__templateInfoLast%3D%3DtemplateInfo)%7Bthis.__templateInfoLast%3DtemplateInfo.previousTemplateInfo%3B%7DtemplateInfo.previousTemplateInfo%3DtemplateInfo.nextTemplateInfo%3Dnull%3B%2F%2F%20Remove%20stamped%20nodes%0Avar%20nodes%3DtemplateInfo.childNodes%3Bfor(var%20i%3D0%3Bi%3Cnodes.length%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3Bnode.parentNode.removeChild(node)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20%60TextNode%60's'%20%60textContent%60.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'PROPERTY_EFFECT_TYPES'%2Cget%3Afunction%20get()%7Breturn%20TYPES%3B%7D%7D%5D%2C%5B%7Bkey%3A'addPropertyEffect'%2Cvalue%3Afunction%20addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis.prototype._addPropertyEffect(property%2Ctype%2Ceffect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20single-property%20observer%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createPropertyObserver'%2Cvalue%3Afunction%20createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bthis.prototype._createPropertyObserver(property%2Cmethod%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20multi-property%20%22method%20observer%22%20based%20on%20the%20provided%0A%20%20%20%20%20%20%20*%20expression%2C%20which%20should%20be%20a%20string%20in%20the%20form%20of%20a%20normal%20JavaScript%0A%20%20%20%20%20%20%20*%20function%20signature%3A%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60.%20%20Each%20argument%0A%20%20%20%20%20%20%20*%20should%20correspond%20to%20a%20property%20or%20path%20in%20the%20context%20of%20this%0A%20%20%20%20%20%20%20*%20prototype%20(or%20instance)%2C%20or%20may%20be%20a%20literal%20string%20or%20number.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createMethodObserver'%2Cvalue%3Afunction%20createMethodObserver(expression%2CdynamicFn)%7Bthis.prototype._createMethodObserver(expression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20dispatch%20%60%3Cproperty%3E-changed%60%0A%20%20%20%20%20%20%20*%20events%20to%20notify%20of%20changes%20to%20the%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createNotifyingProperty'%2Cvalue%3Afunction%20createNotifyingProperty(property)%7Bthis.prototype._createNotifyingProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20read-only%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20To%20set%20the%20property%2C%20use%20the%20protected%20%60_setProperty%60%20API.%0A%20%20%20%20%20%20%20*%20To%20create%20a%20custom%20protected%20setter%20(e.g.%20%60_setMyProp()%60%20for%0A%20%20%20%20%20%20%20*%20property%20%60myProp%60)%2C%20pass%20%60true%60%20for%20%60protectedSetter%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20the%20property%20will%20have%20other%20property%20effects%2C%20this%20method%0A%20%20%20%20%20%20%20*%20should%20be%20called%20first%2C%20before%20adding%20other%20effects.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReadOnlyProperty'%2Cvalue%3Afunction%20createReadOnlyProperty(property%2CprotectedSetter)%7Bthis.prototype._createReadOnlyProperty(property%2CprotectedSetter)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20reflect%20the%20property%20value%0A%20%20%20%20%20%20%20*%20to%20a%20(dash-cased)%20attribute%20of%20the%20same%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReflectedProperty'%2Cvalue%3Afunction%20createReflectedProperty(property)%7Bthis.prototype._createReflectedProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20computed%20property%20whose%20value%20is%20set%20to%20the%20result%20of%20the%0A%20%20%20%20%20%20%20*%20method%20described%20by%20the%20given%20%60expression%60%20each%20time%20one%20or%20more%0A%20%20%20%20%20%20%20*%20arguments%20to%20the%20method%20changes.%20%20The%20expression%20should%20be%20a%20string%0A%20%20%20%20%20%20%20*%20in%20the%20form%20of%20a%20normal%20JavaScript%20function%20signature%3A%0A%20%20%20%20%20%20%20*%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20%20%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createComputedProperty'%2Cvalue%3Afunction%20createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bthis.prototype._createComputedProperty(property%2Cexpression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20the%20provided%20template%20to%20ensure%20binding%20effects%20are%20created%0A%20%20%20%20%20%20%20*%20for%20them%2C%20and%20then%20ensures%20property%20accessors%20are%20created%20for%20any%0A%20%20%20%20%20%20%20*%20dependent%20properties%20in%20the%20template.%20%20Binding%20effects%20for%20bound%0A%20%20%20%20%20%20%20*%20templates%20are%20stored%20in%20a%20linked%20list%20on%20the%20instance%20so%20that%0A%20%20%20%20%20%20%20*%20templates%20can%20be%20efficiently%20stamped%20and%20unstamped.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'bindTemplate'%2Cvalue%3Afunction%20bindTemplate(template)%7Breturn%20this.prototype._bindTemplate(template)%3B%7D%7D%2C%7Bkey%3A'_addTemplatePropertyEffect'%2Cvalue%3Afunction%20_addTemplatePropertyEffect(templateInfo%2Cprop%2Ceffect)%7Bvar%20hostProps%3DtemplateInfo.hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3BhostProps%5Bprop%5D%3Dtrue%3Bvar%20effects%3DtemplateInfo.propertyEffects%3DtemplateInfo.propertyEffects%7C%7C%7B%7D%3Bvar%20propEffects%3Deffects%5Bprop%5D%3Deffects%5Bprop%5D%7C%7C%5B%5D%3BpropEffects.push(effect)%3B%7D%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNode'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%20parts%3Dthis._parseBindings(node.textContent%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Initialize%20the%20textContent%20with%20any%20literal%20parts%0A%2F%2F%20NOTE%3A%20default%20to%20a%20space%20here%20so%20the%20textNode%20remains%3B%20some%20browsers%0A%2F%2F%20(IE)%20omit%20an%20empty%20textNode%20following%20cloneNode%2FimportNode.%0Anode.textContent%3DliteralFromParts(parts)%7C%7C'%20'%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'text'%2C'textContent'%2Cparts)%3Bnoted%3Dtrue%3B%7D%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20attributes.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7Bvar%20parts%3Dthis._parseBindings(value%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Attribute%20or%20property%0Avar%20origName%3Dname%3Bvar%20kind%3D'property'%3B%2F%2F%20The%20only%20way%20we%20see%20a%20capital%20letter%20here%20is%20if%20the%20attr%20has%0A%2F%2F%20a%20capital%20letter%20in%20it%20per%20spec.%20In%20this%20case%2C%20to%20make%20sure%0A%2F%2F%20this%20binding%20works%2C%20we%20go%20ahead%20and%20make%20the%20binding%20to%20the%20attribute.%0Aif(capitalAttributeRegex.test(name))%7Bkind%3D'attribute'%3B%7Delse%20if(name%5Bname.length-1%5D%3D%3D'%24')%7Bname%3Dname.slice(0%2C-1)%3Bkind%3D'attribute'%3B%7D%2F%2F%20Initialize%20attribute%20bindings%20with%20any%20literal%20parts%0Avar%20literal%3DliteralFromParts(parts)%3Bif(literal%26%26kind%3D%3D'attribute')%7B%2F%2F%20Ensure%20a%20ShadyCSS%20template%20scoped%20style%20is%20not%20removed%0A%2F%2F%20when%20a%20class%24%20binding's%20initial%20literal%20value%20is%20set.%0Aif(name%3D%3D'class'%26%26node.hasAttribute('class'))%7Bliteral%2B%3D'%20'%2Bnode.getAttribute(name)%3B%7Dnode.setAttribute(name%2Cliteral)%3B%7D%2F%2F%20Clear%20attribute%20before%20removing%2C%20since%20IE%20won't%20allow%20removing%0A%2F%2F%20%60value%60%20attribute%20if%20it%20previously%20had%20a%20value%20(can't%0A%2F%2F%20unconditionally%20set%20''%20before%20removing%20since%20attributes%20with%20%60%24%60%0A%2F%2F%20can't%20be%20set%20using%20setAttribute)%0Aif(node.localName%3D%3D%3D'input'%26%26origName%3D%3D%3D'value')%7Bnode.setAttribute(origName%2C'')%3B%7D%2F%2F%20Remove%20annotation%0Anode.removeAttribute(origName)%3B%2F%2F%20Case%20hackery%3A%20attributes%20are%20lower-case%2C%20but%20bind%20targets%0A%2F%2F%20(properties)%20are%20case%20sensitive.%20Gambit%20is%20to%20map%20dash-case%20to%0A%2F%2F%20camel-case%3A%20%60foo-bar%60%20becomes%20%60fooBar%60.%0A%2F%2F%20Attribute%20bindings%20are%20excepted.%0Aif(kind%3D%3D%3D'property')%7Bname%3DPolymer.CaseMap.dashToCamelCase(name)%3B%7DaddBinding(this%2CtemplateInfo%2CnodeInfo%2Ckind%2Cname%2Cparts%2Cliteral)%3Breturn%20true%3B%7Delse%7Breturn%20_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNodeAttribute'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20binding%20the%20properties%20that%20a%20nested%20template%20depends%20on%20to%20the%20template%0A%20%20%20%20%20%20%20*%20as%20%60_host_%3Cproperty%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNestedTemplate'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3B%2F%2F%20Merge%20host%20props%20into%20outer%20template%20and%20add%20bindings%0Avar%20hostProps%3DnodeInfo.templateInfo.hostProps%3Bvar%20mode%3D'%7B'%3Bfor(var%20source%20in%20hostProps)%7Bvar%20parts%3D%5B%7Bmode%3Amode%2Csource%3Asource%2Cdependencies%3A%5Bsource%5D%7D%5D%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'property'%2C'_host_'%2Bsource%2Cparts)%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20parse%20text%20in%20a%20template%20(either%20attribute%20values%20or%0A%20%20%20%20%20%20%20*%20textContent)%20into%20binding%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Any%20overrides%20of%20this%20method%20should%20return%20an%20array%20of%20binding%20part%0A%20%20%20%20%20%20%20*%20metadata%20%20representing%20one%20or%20more%20bindings%20found%20in%20the%20provided%20text%0A%20%20%20%20%20%20%20*%20and%20any%20%22literal%22%20text%20in%20between.%20%20Any%20non-literal%20parts%20will%20be%20passed%0A%20%20%20%20%20%20%20*%20to%20%60_evaluateBinding%60%20when%20any%20dependencies%20change.%20%20The%20only%20required%0A%20%20%20%20%20%20%20*%20fields%20of%20each%20%22part%22%20in%20the%20returned%20array%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60dependencies%60%20-%20Array%20containing%20trigger%20metadata%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20that%20should%20trigger%20the%20binding%20to%20update%0A%20%20%20%20%20%20%20*%20-%20%60literal%60%20-%20String%20containing%20text%20if%20the%20part%20represents%20a%20literal%3B%0A%20%20%20%20%20%20%20*%20%20%20in%20this%20case%20no%20%60dependencies%60%20are%20needed%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Additional%20metadata%20for%20use%20by%20%60_evaluateBinding%60%20may%20be%20provided%20in%0A%20%20%20%20%20%20%20*%20each%20part%20object%20as%20needed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20handles%20the%20following%20types%20of%20bindings%0A%20%20%20%20%20%20%20*%20(one%20or%20more%20may%20be%20intermixed%20with%20literal%20strings)%3A%0A%20%20%20%20%20%20%20*%20-%20Property%20binding%3A%20%60%5B%5Bprop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Path%20binding%3A%20%60%5B%5Bobject.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Negated%20property%20or%20path%20bindings%3A%20%60%5B%5B!prop%5D%5D%60%20or%20%60%5B%5B!object.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Two-way%20property%20or%20path%20bindings%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%7B%7Bprop%7D%7D%60%2C%20%60%7B%7Bobject.prop%7D%7D%60%2C%20%60%7B%7B!prop%7D%7D%60%20or%20%60%7B%7B!object.prop%7D%7D%60%0A%20%20%20%20%20%20%20*%20-%20Inline%20computed%20method%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%5B%5Bcompute(a%2C%20'literal'%2C%20b)%5D%5D%60%2C%20%60%5B%5B!compute(a%2C%20'literal'%2C%20b)%5D%5D%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20uses%20a%20regular%20expression%20for%20best%0A%20%20%20%20%20%20%20*%20performance.%20However%2C%20the%20regular%20expression%20uses%20a%20white-list%20of%0A%20%20%20%20%20%20%20*%20allowed%20characters%20in%20a%20data-binding%2C%20which%20causes%20problems%20for%0A%20%20%20%20%20%20%20*%20data-bindings%20that%20do%20use%20characters%20not%20in%20this%20white-list.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Instead%20of%20updating%20the%20white-list%20with%20all%20allowed%20characters%2C%0A%20%20%20%20%20%20%20*%20there%20is%20a%20StrictBindingParser%20(see%20lib%2Fmixins%2Fstrict-binding-parser)%0A%20%20%20%20%20%20%20*%20that%20uses%20a%20state%20machine%20instead.%20This%20state%20machine%20is%20able%20to%20handle%0A%20%20%20%20%20%20%20*%20all%20characters.%20However%2C%20it%20is%20slightly%20less%20performant%2C%20therefore%20we%0A%20%20%20%20%20%20%20*%20extracted%20it%20into%20a%20separate%20optional%20mixin.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20Text%20to%20parse%20from%20attribute%20or%20textContent%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Current%20template%20metadata%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C!BindingPart%3E%7D%20Array%20of%20binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseBindings'%2Cvalue%3Afunction%20_parseBindings(text%2CtemplateInfo)%7Bvar%20parts%3D%5B%5D%3Bvar%20lastIndex%3D0%3Bvar%20m%3Dvoid%200%3B%2F%2F%20Example%3A%20%22literal1%7B%7Bprop%7D%7Dliteral2%5B%5B!compute(foo%2Cbar)%5D%5Dfinal%22%0A%2F%2F%20Regex%20matches%3A%0A%2F%2F%20%20%20%20%20%20%20%20Iteration%201%3A%20%20Iteration%202%3A%0A%2F%2F%20m%5B1%5D%3A%20'%7B%7B'%20%20%20%20%20%20%20%20%20%20'%5B%5B'%0A%2F%2F%20m%5B2%5D%3A%20''%20%20%20%20%20%20%20%20%20%20%20%20'!'%0A%2F%2F%20m%5B3%5D%3A%20'prop'%20%20%20%20%20%20%20%20'compute(foo%2Cbar)'%0Awhile((m%3DbindingRegex.exec(text))!%3D%3Dnull)%7B%2F%2F%20Add%20literal%20part%0Aif(m.index%3ElastIndex)%7Bparts.push(%7Bliteral%3Atext.slice(lastIndex%2Cm.index)%7D)%3B%7D%2F%2F%20Add%20binding%20part%0Avar%20mode%3Dm%5B1%5D%5B0%5D%3Bvar%20negate%3DBoolean(m%5B2%5D)%3Bvar%20source%3Dm%5B3%5D.trim()%3Bvar%20customEvent%3Dfalse%2CnotifyEvent%3D''%2Ccolon%3D-1%3Bif(mode%3D%3D'%7B'%26%26(colon%3Dsource.indexOf('%3A%3A'))%3E0)%7BnotifyEvent%3Dsource.substring(colon%2B2)%3Bsource%3Dsource.substring(0%2Ccolon)%3BcustomEvent%3Dtrue%3B%7Dvar%20signature%3DparseMethod(source)%3Bvar%20dependencies%3D%5B%5D%3Bif(signature)%7B%2F%2F%20Inline%20computed%20function%0Avar%20args%3Dsignature.args%2CmethodName%3Dsignature.methodName%3Bfor(var%20i%3D0%3Bi%3Cargs.length%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bif(!arg.literal)%7Bdependencies.push(arg)%3B%7D%7Dvar%20dynamicFns%3DtemplateInfo.dynamicFns%3Bif(dynamicFns%26%26dynamicFns%5BmethodName%5D%7C%7Csignature.static)%7Bdependencies.push(methodName)%3Bsignature.dynamicFn%3Dtrue%3B%7D%7Delse%7B%2F%2F%20Property%20or%20path%0Adependencies.push(source)%3B%7Dparts.push(%7Bsource%3Asource%2Cmode%3Amode%2Cnegate%3Anegate%2CcustomEvent%3AcustomEvent%2Csignature%3Asignature%2Cdependencies%3Adependencies%2Cevent%3AnotifyEvent%7D)%3BlastIndex%3DbindingRegex.lastIndex%3B%7D%2F%2F%20Add%20a%20final%20literal%20part%0Aif(lastIndex%26%26lastIndex%3Ctext.length)%7Bvar%20literal%3Dtext.substring(lastIndex)%3Bif(literal)%7Bparts.push(%7Bliteral%3Aliteral%7D)%3B%7D%7Dif(parts.length)%7Breturn%20parts%3B%7Delse%7Breturn%20null%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20evaluate%20a%20previously%20parsed%20binding%20part%20based%20on%20a%20set%20of%0A%20%20%20%20%20%20%20*%20one%20or%20more%20changed%20dependencies.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bthis%7D%20inst%20Element%20that%20should%20be%20used%20as%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20binding%20dependencies%0A%20%20%20%20%20%20%20*%20%40param%20%7BBindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20that%20triggered%20this%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20the%20binding%20part%20evaluated%20to%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_evaluateBinding'%2Cvalue%3Afunction%20_evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%7Bvar%20value%3Dvoid%200%3Bif(part.signature)%7Bvalue%3DrunMethodEffect(inst%2Cpath%2Cprops%2ColdProps%2Cpart.signature)%3B%7Delse%20if(path!%3Dpart.source)%7Bvalue%3DPolymer.Path.get(inst%2Cpart.source)%3B%7Delse%7Bif(hasPaths%26%26Polymer.Path.isPath(path))%7Bvalue%3DPolymer.Path.get(inst%2Cpath)%3B%7Delse%7Bvalue%3Dinst.__data%5Bpath%5D%3B%7D%7Dif(part.negate)%7Bvalue%3D!value%3B%7Dreturn%20value%3B%7D%7D%5D)%3Breturn%20PropertyEffects%3B%7D(propertyEffectsBase)%3B%2F%2F%20make%20a%20typing%20for%20closure%20%3AP%0APropertyEffectsType%3DPropertyEffects%3Breturn%20PropertyEffects%3B%7D)%3B%2F**%0A%20%20%20*%20Helper%20api%20for%20enqueuing%20client%20dom%20created%20by%20a%20host%20element.%0A%20%20%20*%0A%20%20%20*%20By%20default%20elements%20are%20flushed%20via%20%60_flushProperties%60%20when%0A%20%20%20*%20%60connectedCallback%60%20is%20called.%20Elements%20attach%20their%20client%20dom%20to%0A%20%20%20*%20themselves%20at%20%60ready%60%20time%20which%20results%20from%20this%20first%20flush.%0A%20%20%20*%20This%20provides%20an%20ordering%20guarantee%20that%20the%20client%20dom%20an%20element%0A%20%20%20*%20creates%20is%20flushed%20before%20the%20element%20itself%20(i.e.%20client%20%60ready%60%0A%20%20%20*%20fires%20before%20host%20%60ready%60).%0A%20%20%20*%0A%20%20%20*%20However%2C%20if%20%60_flushProperties%60%20is%20called%20*before*%20an%20element%20is%20connected%2C%0A%20%20%20*%20as%20for%20example%20%60Templatize%60%20does%2C%20this%20ordering%20guarantee%20cannot%20be%0A%20%20%20*%20satisfied%20because%20no%20elements%20are%20connected.%20(Note%3A%20Bound%20elements%20that%0A%20%20%20*%20receive%20data%20do%20become%20enqueued%20clients%20and%20are%20properly%20ordered%20but%0A%20%20%20*%20unbound%20elements%20are%20not.)%0A%20%20%20*%0A%20%20%20*%20To%20maintain%20the%20desired%20%22client%20before%20host%22%20ordering%20guarantee%20for%20this%0A%20%20%20*%20case%20we%20rely%20on%20the%20%22host%20stack.%20Client%20nodes%20registers%20themselves%20with%0A%20%20%20*%20the%20creating%20host%20element%20when%20created.%20This%20ensures%20that%20all%20client%20dom%0A%20%20%20*%20is%20readied%20in%20the%20proper%20order%2C%20maintaining%20the%20desired%20guarantee.%0A%20%20%20*%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20hostStack%3D%7Bstack%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20add%20to%20hostStack%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FregisterHost%3Afunction%20registerHost(inst)%7Bif(this.stack.length)%7Bvar%20host%3Dthis.stack%5Bthis.stack.length-1%5D%3Bhost._enqueueClient(inst)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20begin%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FbeginHosting%3Afunction%20beginHosting(inst)%7Bthis.stack.push(inst)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20end%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FendHosting%3Afunction%20endHosting(inst)%7Bvar%20stackLen%3Dthis.stack.length%3Bif(stackLen%26%26this.stack%5BstackLen-1%5D%3D%3Dinst)%7Bthis.stack.pop()%3B%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-effects.html.js%0A"
          ],
          "tasks": [
            {
              "urlIndex": 0,
              "startTime": 9070.1,
              "duration": 662,
              "other": 662,
              "scriptEvaluation": 0
            },
            {
              "urlIndex": 1,
              "startTime": 6320,
              "duration": 244,
              "other": 244,
              "scriptEvaluation": 0,
              "styleLayout": 0
            },
            {
              "urlIndex": 2,
              "startTime": 6072.2,
              "duration": 137,
              "other": 137,
              "scriptEvaluation": 0
            },
            {
              "urlIndex": 3,
              "startTime": 10842.3,
              "duration": 108,
              "other": 108,
              "scriptEvaluation": 0
            },
            {
              "urlIndex": 4,
              "startTime": 2860.7,
              "duration": 101,
              "other": 101,
              "scriptEvaluation": 0
            },
            {
              "urlIndex": 5,
              "startTime": 3053.7,
              "duration": 97,
              "other": 97,
              "scriptEvaluation": 0
            },
            {
              "urlIndex": 1,
              "startTime": 5270,
              "duration": 91,
              "other": 91,
              "scriptEvaluation": 0
            },
            {
              "urlIndex": 2,
              "startTime": 7093,
              "duration": 86,
              "other": 86,
              "scriptEvaluation": 0
            },
            {
              "urlIndex": 5,
              "startTime": 3226.7,
              "duration": 80,
              "other": 80,
              "paintCompositeRender": 0,
              "styleLayout": 0
            },
            {
              "urlIndex": 4,
              "startTime": 891.3,
              "duration": 78,
              "other": 78
            },
            {
              "urlIndex": 5,
              "startTime": 3150.7,
              "duration": 76,
              "other": 76,
              "paintCompositeRender": 0,
              "scriptEvaluation": 0,
              "styleLayout": 0
            },
            {
              "urlIndex": 6,
              "startTime": 10617.6,
              "duration": 67,
              "other": 67,
              "paintCompositeRender": 0,
              "scriptEvaluation": 0,
              "styleLayout": 0
            },
            {
              "urlIndex": 5,
              "startTime": 2961.7,
              "duration": 63,
              "other": 63,
              "parseHTML": 0
            },
            {
              "urlIndex": 1,
              "startTime": 5361,
              "duration": 62,
              "other": 62,
              "scriptEvaluation": 0
            },
            {
              "urlIndex": 4,
              "startTime": 774.3,
              "duration": 60,
              "other": 60
            },
            {
              "urlIndex": 7,
              "startTime": 7375.6,
              "duration": 60,
              "other": 60,
              "scriptEvaluation": 0
            },
            {
              "urlIndex": 8,
              "startTime": 10732.5,
              "duration": 51,
              "other": 51,
              "scriptEvaluation": 0
            }
          ]
        }
      },
      "guidanceLevel": 1
    },
    "non-composited-animations": {
      "id": "non-composited-animations",
      "title": "Avoid non-composited animations",
      "description": "Animations which are not composited can be janky and increase CLS. [Learn how to avoid non-composited animations](https://developer.chrome.com/docs/lighthouse/performance/non-composited-animations/)",
      "score": null,
      "scoreDisplayMode": "notApplicable",
      "metricSavings": {
        "CLS": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "failureReason",
              "valueType": "text"
            },
            "label": "Element"
          }
        ],
        "items": []
      },
      "guidanceLevel": 2
    },
    "unsized-images": {
      "id": "unsized-images",
      "title": "Image elements do not have explicit `width` and `height`",
      "description": "Set an explicit width and height on image elements to reduce layout shifts and improve CLS. [Learn how to set image dimensions](https://web.dev/articles/optimize-cls#images_without_dimensions)",
      "score": 0.5,
      "scoreDisplayMode": "metricSavings",
      "metricSavings": {
        "CLS": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          }
        ],
        "items": [
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/11/13/PDEM/87257756007-norwalk-bucees-cs-4.jpg?crop=8639,4861,x0,y449&quality=50&width=420",
            "node": {
              "type": "node",
              "lhId": "1-111-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,A,0,DIV,0,PICTURE,3,IMG",
              "selector": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo",
              "boundingRect": {
                "top": 56,
                "bottom": 288,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 232
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/11/13/PDEM/872…\" alt=\"\" class=\"p2-photo\">",
              "nodeLabel": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/gannett-web/properties/desmoinesregister/logos-and-branding/logo-compact.svg",
            "node": {
              "type": "node",
              "lhId": "1-109-IMG",
              "path": "1,HTML,1,BODY,2,UTIL-STICKY-MODULE,2,DIV,1,DIV,0,DIV,0,DIV,2,A,0,IMG",
              "selector": "div#navRibbon > div#toggleSticky > a#logoContainer > img#logo",
              "boundingRect": {
                "top": 12,
                "bottom": 44,
                "left": 60,
                "right": 152,
                "width": 92,
                "height": 32
              },
              "snippet": "<img alt=\"The Des Moines Register\" class=\"expand-icon\" id=\"logo\" src=\"https://www.gannett-cdn.com/gannett-web/properties/desmoinesregister/logos…\">",
              "nodeLabel": "The Des Moines Register"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/gannett-web/properties/desmoinesregister/logos-and-branding/logo-compact.svg",
            "node": {
              "type": "node",
              "lhId": "1-110-IMG",
              "path": "1,HTML,1,BODY,2,UTIL-STICKY-MODULE,2,DIV,1,DIV,1,DIV,0,DIV,0,DIV,1,A,0,IMG",
              "selector": "div.expand-wrap-top > div#logoWrap > a#hubLogo > img#sidebarLogo",
              "boundingRect": {
                "top": 32,
                "bottom": 77,
                "left": -378,
                "right": -248,
                "width": 129,
                "height": 45
              },
              "snippet": "<img id=\"sidebarLogo\" class=\"full-height-logo\" alt=\"The Des Moines Register\" src=\"https://www.gannett-cdn.com/gannett-web/properties/desmoinesregister/logos…\">",
              "nodeLabel": "The Des Moines Register"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89736913007-screenshot-20260422-132701.png?crop=636,638,x0,y111&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-112-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,3,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 377,
                "bottom": 482,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 105
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/897…\" class=\"p1-image\" alt=\"Window washer falls three stories from downtown Des Moines building\">",
              "nodeLabel": "Window washer falls three stories from downtown Des Moines building"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89733819007-6-a-92-b-62-e-91-aa-4-e-7-c-80-c-49-cd-7-dc-94230-a.png?crop=282,283,x0,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-122-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,18,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1582,
                "bottom": 1687,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 105
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/897…\" class=\"p1-image\" alt=\"Police searching for missing Ankeny teen\">",
              "nodeLabel": "Police searching for missing Ankeny teen"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/19/PIOC/89690040007-20260419-iowa-citypedestrianmallshooting-0005.jpg?crop=4000,3999,x600,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-113-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,4,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 498,
                "bottom": 603,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/19/PIOC/896…\" class=\"p1-image\" alt=\"Police release little info in aftermath of Iowa City shooting. Why?\">",
              "nodeLabel": "Police release little info in aftermath of Iowa City shooting. Why?"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/89719075007-property-tax-hearing-cs-40.jpg?crop=5760,5759,x432,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-114-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,5,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 619,
                "bottom": 723,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/897…\" class=\"p1-image\" alt=\"Iowa landlords say Senate property tax plan could drive up rent costs\">",
              "nodeLabel": "Iowa landlords say Senate property tax plan could drive up rent costs"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/presto/2020/09/23/PDEM/6aeb5a9d-fd7d-4216-8c3d-cb451bdf8618-0923-Jail-001.jpg?crop=2000,2000,x750,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-115-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,6,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 739,
                "bottom": 844,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/presto/2020/09/23/PDEM/6aeb5a9d-fd7d-4216-8c3d…\" class=\"p1-image\" alt=\"Solar panels will soon help power Polk County Jail\">",
              "nodeLabel": "Solar panels will soon help power Polk County Jail"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/89718900007-img-0107.jpeg?crop=4283,4284,x0,y714&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-116-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,9,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 860,
                "bottom": 964,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/897…\" class=\"p1-image\" alt=\"How a comic book can teach you about cocktails\">",
              "nodeLabel": "How a comic book can teach you about cocktails"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/89718940007-roumel-head-shot.jpg?crop=2572,2574,x0,y65&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-117-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,10,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 980,
                "bottom": 1084,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/897…\" class=\"p1-image\" alt=\"A Driftless road‑trip payoff: Iowa supper club earns top praise\">",
              "nodeLabel": "A Driftless road‑trip payoff: Iowa supper club earns top praise"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89738437007-screen-shot-1776887130755.jpg?crop=1079,1080,x0,y672&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-118-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,12,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1100,
                "bottom": 1205,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/897…\" class=\"p1-image\" alt=\"Watch:: Window washer rescued from scaffolding on downtown building\">",
              "nodeLabel": "Watch:: Window washer rescued from scaffolding on downtown building"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/03/24/PDEM/89309061007-dmps-meeting.jpg?crop=1205,1205,x1122,y555&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-119-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,13,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1221,
                "bottom": 1325,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/03/24/PDEM/893…\" class=\"p1-image\" alt=\"How Des Moines Public Schools' budget will affect your property taxes\">",
              "nodeLabel": "How Des Moines Public Schools' budget will affect your property taxes"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/11/05/PDEM/87097506007-annie-frisbie.jpg?crop=599,599,x0,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-120-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,15,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1341,
                "bottom": 1446,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/11/05/PDEM/870…\" class=\"p1-image\" alt=\"Mile posts: Items on Annie Frisbie, Shelby Houlihan, Mallory Lindaman, Ril…\">",
              "nodeLabel": "Mile posts: Items on Annie Frisbie, Shelby Houlihan, Mallory Lindaman, Riley Wi…"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/05/09/PDEM/83543533007-eminent-domain-cs-016.jpg?crop=5761,5759,x1439,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-121-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,16,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1462,
                "bottom": 1566,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/05/09/PDEM/835…\" class=\"p1-image\" alt=\"Hear Sen. Jack Whitver's emotional retirement speech\">",
              "nodeLabel": "Hear Sen. Jack Whitver's emotional retirement speech"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/-mm-/dac7d256a59f84940e502b66fdba9c9126e1eda5/c=300-0-1140-840/local/-/media/2017/04/16/DesMoines/B9327192121Z.1_20170416235011_000_GEHI321OF.1-0.jpg?quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-123-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,19,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1703,
                "bottom": 1807,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/-mm-/dac7d256a59f84940e502b66fdba9c9126e1eda5/…\" class=\"p1-image\" alt=\"Motorcyclist dead after West Des Moines crash with school bus\">",
              "nodeLabel": "Motorcyclist dead after West Des Moines crash with school bus"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/-mm-/a101bc7dcedf5dbcb73e5fd751878757ec594838/c=150-0-569-419/local/-/media/DesMoines/GenericImages/2013/11/06/1383749840000-handcuffs.jpg?quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-124-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,20,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1823,
                "bottom": 1928,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/-mm-/a101bc7dcedf5dbcb73e5fd751878757ec594838/…\" class=\"p1-image\" alt=\"Suspect in Des Moines homicide arrested in Chicago\">",
              "nodeLabel": "Suspect in Des Moines homicide arrested in Chicago"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/02/26/NATR/88886339007-0218-coach-steyer-9.jpg?crop=1996,1995,x502,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-125-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,21,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1944,
                "bottom": 2048,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/02/26/NATR/888…\" class=\"p1-image\" alt=\"ISU assistant coach Jodi Steyer announces retirement\">",
              "nodeLabel": "ISU assistant coach Jodi Steyer announces retirement"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/08/19/PDEM/85724991007-081925-chows-gymnastics-ls-04.jpg?crop=4672,4671,x1752,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-126-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,22,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 2064,
                "bottom": 2169,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/08/19/PDEM/857…\" class=\"p1-image\" alt=\"Iowa gymnastics coach to plead guilty in Mississippi child porn case\">",
              "nodeLabel": "Iowa gymnastics coach to plead guilty in Mississippi child porn case"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/09/26/PDEM/86367831007-harvest-4.jpg?crop=5222,5221,x1392,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-127-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,23,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 2185,
                "bottom": 2289,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/09/26/PDEM/863…\" class=\"p1-image\" alt=\"Soy supports a sustainable future, from farm to fork\">",
              "nodeLabel": "Soy supports a sustainable future, from farm to fork"
            }
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89734206007-caps-in-air.png?crop=2308,2308,x990,y0&quality=50&width=270",
            "node": {
              "type": "node",
              "lhId": "1-128-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,24,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 2305,
                "bottom": 2410,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/897…\" class=\"p1-image\" alt=\"Make College Great Again? Why UI's new center is causing a stir\">",
              "nodeLabel": "Make College Great Again? Why UI's new center is causing a stir"
            }
          }
        ]
      },
      "guidanceLevel": 4
    },
    "valid-source-maps": {
      "id": "valid-source-maps",
      "title": "Page has valid source maps",
      "description": "Source maps translate minified code to the original source code. This helps developers debug in production. In addition, Lighthouse is able to provide further insights. Consider deploying source maps to take advantage of these benefits. [Learn more about source maps](https://developer.chrome.com/docs/devtools/javascript/source-maps/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "scriptUrl",
            "valueType": "url",
            "subItemsHeading": {
              "key": "error"
            },
            "label": "URL"
          },
          {
            "key": "sourceMapUrl",
            "valueType": "url",
            "label": "Map URL"
          }
        ],
        "items": [
          {
            "scriptUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js.map",
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "error": "Error: Failed fetching source map (403)"
                }
              ]
            }
          },
          {
            "scriptUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js.map",
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "error": "Error: Failed fetching source map (403)"
                }
              ]
            }
          },
          {
            "scriptUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js.map",
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "error": "Error: Failed fetching source map (403)"
                }
              ]
            }
          },
          {
            "scriptUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js.map",
            "subItems": {
              "type": "subitems",
              "items": []
            }
          },
          {
            "scriptUrl": "https://atoms.desmoinesregister.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "sourceMapUrl": "https://atoms.desmoinesregister.com/atoms-library/prod/dist/gannett-atoms-library.js.map",
            "subItems": {
              "type": "subitems",
              "items": []
            }
          },
          {
            "scriptUrl": "data:text/javascript;charset=utf-8,'use%20strict'%3Bvar%20siteColor%3Dwindow.ga_data.site.colors.siteColor%3Bif(siteColor!%3D%3Dundefined)%7Bdocument.documentElement.style.setProperty('--color-theme'%2CsiteColor)%3B%7D%0A%2F%2F%23%20sourceMappingURL%3D..%2F..%2Fmaps%2Fgallium%2Fthemes%2Funiversal.html_script_0.js.map%0A%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fgallium%2Fthemes%2Funiversal.html.js%0A",
            "sourceMapUrl": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/maps/gallium/themes/universal.html_script_0.js.map",
            "subItems": {
              "type": "subitems",
              "items": []
            }
          }
        ]
      }
    },
    "csp-xss": {
      "id": "csp-xss",
      "title": "Ensure CSP is effective against XSS attacks",
      "description": "A strong Content Security Policy (CSP) significantly reduces the risk of cross-site scripting (XSS) attacks. [Learn how to use a CSP to prevent XSS](https://developer.chrome.com/docs/lighthouse/best-practices/csp-xss/)",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "directive",
            "valueType": "code",
            "subItemsHeading": {
              "key": "directive"
            },
            "label": "Directive"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "directive": "script-src",
            "description": "`script-src` directive is missing. This can allow the execution of unsafe scripts.",
            "severity": "High"
          },
          {
            "directive": "object-src",
            "description": "Missing `object-src` allows the injection of plugins that execute unsafe scripts. Consider setting `object-src` to `'none'` if you can.",
            "severity": "High"
          }
        ]
      }
    },
    "has-hsts": {
      "id": "has-hsts",
      "title": "Use a strong HSTS policy",
      "description": "Deployment of the HSTS header significantly reduces the risk of downgrading HTTP connections and eavesdropping attacks. A rollout in stages, starting with a low max-age is recommended. [Learn more about using a strong HSTS policy.](https://developer.chrome.com/docs/lighthouse/best-practices/has-hsts)",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "directive",
            "valueType": "code",
            "subItemsHeading": {
              "key": "directive"
            },
            "label": "Directive"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "directive": "max-age",
            "description": "`max-age` is too low",
            "severity": "High"
          },
          {
            "directive": "includeSubDomains",
            "description": "No `includeSubDomains` directive found",
            "severity": "Medium"
          },
          {
            "directive": "preload",
            "description": "No `preload` directive found",
            "severity": "Medium"
          }
        ]
      }
    },
    "origin-isolation": {
      "id": "origin-isolation",
      "title": "Ensure proper origin isolation with COOP",
      "description": "The Cross-Origin-Opener-Policy (COOP) can be used to isolate the top-level window from other documents such as pop-ups. [Learn more about deploying the COOP header.](https://web.dev/articles/why-coop-coep#coop)",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "directive",
            "valueType": "code",
            "subItemsHeading": {
              "key": "directive"
            },
            "label": "Directive"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "description": "No COOP header found",
            "severity": "High"
          }
        ]
      }
    },
    "clickjacking-mitigation": {
      "id": "clickjacking-mitigation",
      "title": "Mitigate clickjacking with XFO or CSP",
      "description": "The `X-Frame-Options` (XFO) header or the `frame-ancestors` directive in the `Content-Security-Policy` (CSP) header control where a page can be embedded. These can mitigate clickjacking attacks by blocking some or all sites from embedding the page. [Learn more about mitigating clickjacking](https://developer.chrome.com/docs/lighthouse/best-practices/clickjacking-mitigation).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "severity": "High",
            "description": "No frame control policy found"
          }
        ]
      }
    },
    "trusted-types-xss": {
      "id": "trusted-types-xss",
      "title": "Mitigate DOM-based XSS with Trusted Types",
      "description": "The `require-trusted-types-for` directive in the `Content-Security-Policy` (CSP) header instructs user agents to control the data passed to DOM XSS sink functions. [Learn more about mitigating DOM-based XSS with Trusted Types](https://developer.chrome.com/docs/lighthouse/best-practices/trusted-types-xss).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "description",
            "valueType": "text",
            "subItemsHeading": {
              "key": "description"
            },
            "label": "Description"
          },
          {
            "key": "severity",
            "valueType": "text",
            "subItemsHeading": {
              "key": "severity"
            },
            "label": "Severity"
          }
        ],
        "items": [
          {
            "severity": "High",
            "description": "No `Content-Security-Policy` header with Trusted Types directive found"
          }
        ]
      }
    },
    "script-treemap-data": {
      "id": "script-treemap-data",
      "title": "Script Treemap Data",
      "description": "Used for treemap app",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "treemap-data",
        "nodes": [
          {
            "name": "https://eu.desmoinesregister.com/",
            "resourceBytes": 27298,
            "encodedBytes": 5812,
            "unusedBytes": 10886,
            "children": [
              {
                "name": "(inline) (function() {\n …",
                "resourceBytes": 11647,
                "unusedBytes": 2513
              },
              {
                "name": "(inline) function Optano…",
                "resourceBytes": 29,
                "unusedBytes": 0
              },
              {
                "name": "(inline) // Define Serve…",
                "resourceBytes": 2874,
                "unusedBytes": 268
              },
              {
                "name": "(inline) var _toggleNav;…",
                "resourceBytes": 11344,
                "unusedBytes": 6784
              },
              {
                "name": "(inline) let docAnalytic…",
                "resourceBytes": 156,
                "unusedBytes": 85
              },
              {
                "name": "(inline) function firePr…",
                "resourceBytes": 1248,
                "unusedBytes": 1236
              }
            ]
          },
          {
            "name": "https://cdn.cookielaw.org/scripttemplates/otSDKStub.js",
            "resourceBytes": 26578,
            "encodedBytes": 8732,
            "unusedBytes": 7572
          },
          {
            "name": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
            "resourceBytes": 103,
            "encodedBytes": 116,
            "unusedBytes": 0
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
            "resourceBytes": 938,
            "encodedBytes": 502,
            "unusedBytes": 0
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "resourceBytes": 335571,
            "encodedBytes": 83693,
            "children": [
              {
                "name": "../../..",
                "resourceBytes": 335506,
                "children": [
                  {
                    "name": "node_modules",
                    "resourceBytes": 147522,
                    "children": [
                      {
                        "name": "lit-html",
                        "resourceBytes": 15109,
                        "children": [
                          {
                            "name": "lib",
                            "resourceBytes": 12373,
                            "children": [
                              {
                                "name": "dom.js",
                                "resourceBytes": 282
                              },
                              {
                                "name": "template.js",
                                "resourceBytes": 1767
                              },
                              {
                                "name": "modify-template.js",
                                "resourceBytes": 932,
                                "unusedBytes": 914
                              },
                              {
                                "name": "directive.js",
                                "resourceBytes": 108
                              },
                              {
                                "name": "part.js",
                                "resourceBytes": 10
                              },
                              {
                                "name": "template-instance.js",
                                "resourceBytes": 955
                              },
                              {
                                "name": "template-result.js",
                                "resourceBytes": 791
                              },
                              {
                                "name": "parts.js",
                                "resourceBytes": 4806,
                                "unusedBytes": 144
                              },
                              {
                                "name": "template-factory.js",
                                "resourceBytes": 343,
                                "unusedBytes": 327
                              },
                              {
                                "name": "render.js",
                                "resourceBytes": 169
                              },
                              {
                                "name": "default-template-processor.js",
                                "resourceBytes": 247
                              },
                              {
                                "name": "shady-render.js",
                                "resourceBytes": 1963,
                                "unusedBytes": 815
                              }
                            ],
                            "unusedBytes": 2200
                          },
                          {
                            "name": "lit-html.js",
                            "resourceBytes": 165
                          },
                          {
                            "name": "directives",
                            "resourceBytes": 2571,
                            "unusedBytes": 670,
                            "children": [
                              {
                                "name": "class-map.js",
                                "resourceBytes": 962,
                                "unusedBytes": 354
                              },
                              {
                                "name": "if-defined.js",
                                "resourceBytes": 214
                              },
                              {
                                "name": "live.js",
                                "resourceBytes": 508
                              },
                              {
                                "name": "style-map.js",
                                "resourceBytes": 539
                              },
                              {
                                "name": "unsafe-html.js",
                                "resourceBytes": 348,
                                "unusedBytes": 316
                              }
                            ]
                          }
                        ],
                        "unusedBytes": 2870
                      },
                      {
                        "name": "lit-element",
                        "resourceBytes": 9575,
                        "unusedBytes": 1309,
                        "children": [
                          {
                            "name": "lib",
                            "resourceBytes": 7774,
                            "unusedBytes": 1180,
                            "children": [
                              {
                                "name": "updating-element.js",
                                "resourceBytes": 5501,
                                "unusedBytes": 366
                              },
                              {
                                "name": "decorators.js",
                                "resourceBytes": 1381,
                                "unusedBytes": 481
                              },
                              {
                                "name": "css-tag.js",
                                "resourceBytes": 892,
                                "unusedBytes": 333
                              }
                            ]
                          },
                          {
                            "name": "lit-element.js",
                            "resourceBytes": 1801,
                            "unusedBytes": 129
                          }
                        ]
                      },
                      {
                        "name": "tslib/tslib.es6.js",
                        "resourceBytes": 852,
                        "unusedBytes": 235
                      },
                      {
                        "name": "@material",
                        "resourceBytes": 87347,
                        "unusedBytes": 12379,
                        "children": [
                          {
                            "name": "mwc-base",
                            "resourceBytes": 1320,
                            "unusedBytes": 325,
                            "children": [
                              {
                                "name": "utils.js",
                                "resourceBytes": 239,
                                "unusedBytes": 81
                              },
                              {
                                "name": "base-element.js",
                                "resourceBytes": 259
                              },
                              {
                                "name": "form-element.js",
                                "resourceBytes": 385,
                                "unusedBytes": 204
                              },
                              {
                                "name": "observer.js",
                                "resourceBytes": 437,
                                "unusedBytes": 40
                              }
                            ]
                          },
                          {
                            "name": "base/foundation.js",
                            "resourceBytes": 519,
                            "unusedBytes": 104
                          },
                          {
                            "name": "notched-outline",
                            "resourceBytes": 1138,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 229
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 909,
                                "unusedBytes": 531
                              }
                            ],
                            "unusedBytes": 531
                          },
                          {
                            "name": "mwc-notched-outline",
                            "resourceBytes": 4347,
                            "unusedBytes": 817,
                            "children": [
                              {
                                "name": "mwc-notched-outline-base.js",
                                "resourceBytes": 1091,
                                "unusedBytes": 817
                              },
                              {
                                "name": "mwc-notched-outline-css.js",
                                "resourceBytes": 3183
                              },
                              {
                                "name": "mwc-notched-outline.js",
                                "resourceBytes": 73
                              }
                            ]
                          },
                          {
                            "name": "floating-label",
                            "resourceBytes": 1542,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 173
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 1369,
                                "unusedBytes": 1016
                              }
                            ],
                            "unusedBytes": 1016
                          },
                          {
                            "name": "mwc-floating-label/mwc-floating-label-directive.js",
                            "resourceBytes": 425,
                            "unusedBytes": 397
                          },
                          {
                            "name": "line-ripple",
                            "resourceBytes": 1429,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 111
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 1318,
                                "unusedBytes": 680
                              }
                            ],
                            "unusedBytes": 680
                          },
                          {
                            "name": "mwc-line-ripple/mwc-line-ripple-directive.js",
                            "resourceBytes": 440,
                            "unusedBytes": 137
                          },
                          {
                            "name": "textfield",
                            "resourceBytes": 9541,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 1001
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 8540,
                                "unusedBytes": 4735
                              }
                            ],
                            "unusedBytes": 4735
                          },
                          {
                            "name": "mwc-textfield",
                            "resourceBytes": 54616,
                            "unusedBytes": 3213,
                            "children": [
                              {
                                "name": "mwc-textfield-base.js",
                                "resourceBytes": 10901,
                                "unusedBytes": 3213
                              },
                              {
                                "name": "mwc-textfield-css.js",
                                "resourceBytes": 43648
                              },
                              {
                                "name": "mwc-textfield.js",
                                "resourceBytes": 67
                              }
                            ]
                          },
                          {
                            "name": "animation/util.js",
                            "resourceBytes": 421
                          },
                          {
                            "name": "linear-progress",
                            "resourceBytes": 2823,
                            "children": [
                              {
                                "name": "constants.js",
                                "resourceBytes": 327
                              },
                              {
                                "name": "foundation.js",
                                "resourceBytes": 2496,
                                "unusedBytes": 340
                              }
                            ],
                            "unusedBytes": 340
                          },
                          {
                            "name": "mwc-linear-progress",
                            "resourceBytes": 8786,
                            "unusedBytes": 84,
                            "children": [
                              {
                                "name": "mwc-linear-progress-base.js",
                                "resourceBytes": 2244,
                                "unusedBytes": 84
                              },
                              {
                                "name": "mwc-linear-progress-css.js",
                                "resourceBytes": 6465
                              },
                              {
                                "name": "mwc-linear-progress.js",
                                "resourceBytes": 77
                              }
                            ]
                          }
                        ]
                      },
                      {
                        "name": "@glidejs/glide/dist/glide.esm.js",
                        "resourceBytes": 27383,
                        "unusedBytes": 10522
                      },
                      {
                        "name": "@polymer/lit-element",
                        "resourceBytes": 7256,
                        "unusedBytes": 943,
                        "children": [
                          {
                            "name": "lib",
                            "resourceBytes": 5963,
                            "unusedBytes": 772,
                            "children": [
                              {
                                "name": "updating-element.js",
                                "resourceBytes": 5629,
                                "unusedBytes": 728
                              },
                              {
                                "name": "decorators.js",
                                "resourceBytes": 289,
                                "unusedBytes": 44
                              },
                              {
                                "name": "css-tag.js",
                                "resourceBytes": 45
                              }
                            ]
                          },
                          {
                            "name": "lit-element.js",
                            "resourceBytes": 1293,
                            "unusedBytes": 171
                          }
                        ]
                      }
                    ],
                    "unusedBytes": 28258
                  },
                  {
                    "name": "elements-lit",
                    "resourceBytes": 187984,
                    "unusedBytes": 98867,
                    "children": [
                      {
                        "name": "alerts",
                        "resourceBytes": 15919,
                        "unusedBytes": 11799,
                        "children": [
                          {
                            "name": "alerts-atoms/alerts-atoms.js",
                            "resourceBytes": 2353,
                            "unusedBytes": 380
                          },
                          {
                            "name": "alerts-banner/alerts-banner.js",
                            "resourceBytes": 3260,
                            "unusedBytes": 2893
                          },
                          {
                            "name": "alerts-manager/alerts-manager.js",
                            "resourceBytes": 4470,
                            "unusedBytes": 2974
                          },
                          {
                            "name": "alerts-ad-free-modal/alerts-ad-free-modal.js",
                            "resourceBytes": 1546,
                            "unusedBytes": 1441
                          },
                          {
                            "name": "alerts-cc-decline-modal/alerts-cc-decline-modal.js",
                            "resourceBytes": 4290,
                            "unusedBytes": 4111
                          }
                        ]
                      },
                      {
                        "name": "util",
                        "resourceBytes": 12585,
                        "children": [
                          {
                            "name": "util-lit/util-lit.js",
                            "resourceBytes": 612
                          },
                          {
                            "name": "util-analytics/util-analytics.js",
                            "resourceBytes": 3850,
                            "unusedBytes": 2846
                          },
                          {
                            "name": "util-pcs/util-pcs.js",
                            "resourceBytes": 3735
                          },
                          {
                            "name": "util-shared-analytics/util-shared-analytics.js",
                            "resourceBytes": 44,
                            "unusedBytes": 44
                          },
                          {
                            "name": "util-modal/util-modal.js",
                            "resourceBytes": 504,
                            "unusedBytes": 259
                          },
                          {
                            "name": "util-page-reload/util-page-reload.js",
                            "resourceBytes": 816,
                            "unusedBytes": 421
                          },
                          {
                            "name": "util-section-color/util-section-color.js",
                            "resourceBytes": 939,
                            "unusedBytes": 344
                          },
                          {
                            "name": "util-sticky-module/util-sticky-module.js",
                            "resourceBytes": 641
                          },
                          {
                            "name": "util-user-subscription-manager/util-user-subscription-manager.js",
                            "resourceBytes": 1444,
                            "unusedBytes": 1057
                          }
                        ],
                        "unusedBytes": 4971
                      },
                      {
                        "name": "ui",
                        "resourceBytes": 5473,
                        "children": [
                          {
                            "name": "ui-icon/ui-icon.js",
                            "resourceBytes": 2969
                          },
                          {
                            "name": "ui-label-bucket/ui-label-bucket.js",
                            "resourceBytes": 2504
                          }
                        ]
                      },
                      {
                        "name": "cta",
                        "resourceBytes": 3968,
                        "unusedBytes": 1079,
                        "children": [
                          {
                            "name": "cta-atoms-container-aux/cta-atoms-container-aux.js",
                            "resourceBytes": 206,
                            "unusedBytes": 98
                          },
                          {
                            "name": "cta-atoms-container-inline/cta-atoms-container-inline.js",
                            "resourceBytes": 403,
                            "unusedBytes": 292
                          },
                          {
                            "name": "cta-atoms-container-inline-roadblock/cta-atoms-container-inline-roadblock.js",
                            "resourceBytes": 406,
                            "unusedBytes": 285
                          },
                          {
                            "name": "cta-atoms-container-post-content/cta-atoms-container-post-content.js",
                            "resourceBytes": 215,
                            "unusedBytes": 98
                          },
                          {
                            "name": "cta-generic-text/cta-generic-text.js",
                            "resourceBytes": 2738,
                            "unusedBytes": 306
                          }
                        ]
                      },
                      {
                        "name": "nav",
                        "resourceBytes": 40585,
                        "unusedBytes": 26186,
                        "children": [
                          {
                            "name": "nav-global-login/nav-global-login.js",
                            "resourceBytes": 5812,
                            "unusedBytes": 5308
                          },
                          {
                            "name": "nav-global-login-piano/nav-global-login-piano.js",
                            "resourceBytes": 6300,
                            "unusedBytes": 5790
                          },
                          {
                            "name": "nav-tree/nav-tree.js",
                            "resourceBytes": 5831,
                            "unusedBytes": 1521
                          },
                          {
                            "name": "nav-promo-item/nav-promo-item.js",
                            "resourceBytes": 1810
                          },
                          {
                            "name": "nav-hub/nav-hub.js",
                            "resourceBytes": 2980,
                            "unusedBytes": 203
                          },
                          {
                            "name": "nav-manager/nav-manager.js",
                            "resourceBytes": 3617,
                            "unusedBytes": 2713
                          },
                          {
                            "name": "nav-search-bar/nav-search-bar.js",
                            "resourceBytes": 1171,
                            "unusedBytes": 322
                          },
                          {
                            "name": "nav-sense-of-place/nav-sense-of-place.js",
                            "resourceBytes": 2989,
                            "unusedBytes": 2674
                          },
                          {
                            "name": "nav-search-bucket/nav-search-bucket.js",
                            "resourceBytes": 2935,
                            "unusedBytes": 778
                          },
                          {
                            "name": "nav-share-buttons/nav-share-buttons.js",
                            "resourceBytes": 7140,
                            "unusedBytes": 6877
                          }
                        ]
                      },
                      {
                        "name": "media/media-badge/media-badge.js",
                        "resourceBytes": 1468
                      },
                      {
                        "name": "promo",
                        "resourceBytes": 39642,
                        "unusedBytes": 19577,
                        "children": [
                          {
                            "name": "promo-story-card/promo-story-card.js",
                            "resourceBytes": 11606,
                            "unusedBytes": 3179
                          },
                          {
                            "name": "promo-story-thumb-large/promo-story-thumb-large.js",
                            "resourceBytes": 4619
                          },
                          {
                            "name": "promo-story-bucket-short/promo-story-bucket-short.js",
                            "resourceBytes": 5568,
                            "unusedBytes": 490
                          },
                          {
                            "name": "lit-carousel-card/lit-carousel-card.js",
                            "resourceBytes": 4308,
                            "unusedBytes": 3474
                          },
                          {
                            "name": "lit-story-carousel/lit-story-carousel.js",
                            "resourceBytes": 3967,
                            "unusedBytes": 3419
                          },
                          {
                            "name": "promo-story-thumb-small/promo-story-thumb-small.js",
                            "resourceBytes": 7156,
                            "unusedBytes": 6922
                          },
                          {
                            "name": "promo-story-bucket/promo-story-bucket.js",
                            "resourceBytes": 2418,
                            "unusedBytes": 2093
                          }
                        ]
                      },
                      {
                        "name": "story/story-timestamp/story-timestamp.js",
                        "resourceBytes": 2086,
                        "unusedBytes": 493
                      },
                      {
                        "name": "partner",
                        "resourceBytes": 66258,
                        "unusedBytes": 34762,
                        "children": [
                          {
                            "name": "partner-slot/partner-slot.js",
                            "resourceBytes": 22965,
                            "unusedBytes": 9159
                          },
                          {
                            "name": "partner-bid/partner-bid.js",
                            "resourceBytes": 10311,
                            "unusedBytes": 2969
                          },
                          {
                            "name": "partner-banner/partner-banner.js",
                            "resourceBytes": 1302
                          },
                          {
                            "name": "partner-branded-content-tile/partner-branded-content-tile.js",
                            "resourceBytes": 740
                          },
                          {
                            "name": "partner-feedback/partner-feedback.js",
                            "resourceBytes": 660,
                            "unusedBytes": 599
                          },
                          {
                            "name": "partner-flipp/partner-flipp.js",
                            "resourceBytes": 2474,
                            "unusedBytes": 2407
                          },
                          {
                            "name": "partner-gci-analytics/partner-gci-analytics.js",
                            "resourceBytes": 10118,
                            "unusedBytes": 9512
                          },
                          {
                            "name": "partner-high-impact/partner-high-impact.js",
                            "resourceBytes": 1422,
                            "unusedBytes": 792
                          },
                          {
                            "name": "partner-inline/partner-inline.js",
                            "resourceBytes": 1354,
                            "unusedBytes": 134
                          },
                          {
                            "name": "partner-leaderboard/partner-leaderboard.js",
                            "resourceBytes": 1062
                          },
                          {
                            "name": "partner-piano/partner-piano.js",
                            "resourceBytes": 3863,
                            "unusedBytes": 3721
                          },
                          {
                            "name": "partner-poster/partner-poster.js",
                            "resourceBytes": 685
                          },
                          {
                            "name": "partner-posterscroll/partner-posterscroll.js",
                            "resourceBytes": 2496,
                            "unusedBytes": 757
                          },
                          {
                            "name": "partner-recommendations/partner-recommendations.js",
                            "resourceBytes": 2040,
                            "unusedBytes": 812
                          },
                          {
                            "name": "partner-sponsor-logo/partner-sponsor-logo.js",
                            "resourceBytes": 805,
                            "unusedBytes": 257
                          },
                          {
                            "name": "partner-admiral/partner-admiral.js",
                            "resourceBytes": 812,
                            "unusedBytes": 743
                          },
                          {
                            "name": "partner-contest-bucket/partner-contest-bucket.js",
                            "resourceBytes": 3149,
                            "unusedBytes": 2900
                          }
                        ]
                      }
                    ]
                  }
                ],
                "unusedBytes": 127125
              },
              {
                "name": "(unmapped)",
                "resourceBytes": 65
              }
            ],
            "unusedBytes": 127125
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
            "resourceBytes": 11823,
            "encodedBytes": 3572,
            "unusedBytes": 4470
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "resourceBytes": 78889,
            "encodedBytes": 17664,
            "unusedBytes": 71380
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
            "resourceBytes": 18995,
            "encodedBytes": 5322,
            "unusedBytes": 10901
          },
          {
            "name": "https://atoms.desmoinesregister.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "resourceBytes": 58540,
            "encodedBytes": 16036,
            "unusedBytes": 39138,
            "children": [
              {
                "name": "webpack:/atoms-library",
                "resourceBytes": 58269,
                "unusedBytes": 39138,
                "children": [
                  {
                    "name": ".",
                    "resourceBytes": 57974,
                    "unusedBytes": 38994,
                    "children": [
                      {
                        "name": "src",
                        "resourceBytes": 34512,
                        "unusedBytes": 21390,
                        "children": [
                          {
                            "name": "api/api.js",
                            "resourceBytes": 762,
                            "unusedBytes": 34
                          },
                          {
                            "name": "cookies",
                            "resourceBytes": 6658,
                            "unusedBytes": 5185,
                            "children": [
                              {
                                "name": "gnt_atoms_rate/gnt_atoms_rate.js",
                                "resourceBytes": 3855,
                                "unusedBytes": 3026
                              },
                              {
                                "name": "gnt_cec/gnt_cec.js",
                                "resourceBytes": 645,
                                "unusedBytes": 433
                              },
                              {
                                "name": "gnt_region/gnt_region.js",
                                "resourceBytes": 949,
                                "unusedBytes": 738
                              },
                              {
                                "name": "gup_lng/gup_lng.js",
                                "resourceBytes": 1209,
                                "unusedBytes": 988
                              }
                            ]
                          },
                          {
                            "name": "journey/journey.js",
                            "resourceBytes": 2595,
                            "unusedBytes": 830
                          },
                          {
                            "name": "module",
                            "resourceBytes": 16947,
                            "unusedBytes": 13233,
                            "children": [
                              {
                                "name": "components",
                                "resourceBytes": 1794,
                                "unusedBytes": 1401,
                                "children": [
                                  {
                                    "name": "component.js",
                                    "resourceBytes": 509,
                                    "unusedBytes": 331
                                  },
                                  {
                                    "name": "library.js",
                                    "resourceBytes": 1285,
                                    "unusedBytes": 1070
                                  }
                                ]
                              },
                              {
                                "name": "links/link.js",
                                "resourceBytes": 4223,
                                "unusedBytes": 3913
                              },
                              {
                                "name": "module.js",
                                "resourceBytes": 6643,
                                "unusedBytes": 5685
                              },
                              {
                                "name": "types",
                                "resourceBytes": 2992,
                                "unusedBytes": 2234,
                                "children": [
                                  {
                                    "name": "bar/bar.js",
                                    "resourceBytes": 1234,
                                    "unusedBytes": 941
                                  },
                                  {
                                    "name": "modal/modal.js",
                                    "resourceBytes": 1253,
                                    "unusedBytes": 960
                                  },
                                  {
                                    "name": "target/target.js",
                                    "resourceBytes": 505,
                                    "unusedBytes": 333
                                  }
                                ]
                              },
                              {
                                "name": "user/user.js",
                                "resourceBytes": 1295
                              }
                            ]
                          },
                          {
                            "name": "setup/setup.js",
                            "resourceBytes": 3294
                          },
                          {
                            "name": "utils/utils.js",
                            "resourceBytes": 2129,
                            "unusedBytes": 1068
                          },
                          {
                            "name": "index.js",
                            "resourceBytes": 2127,
                            "unusedBytes": 1040
                          }
                        ]
                      },
                      {
                        "name": "node_modules",
                        "resourceBytes": 23462,
                        "children": [
                          {
                            "name": "@babel/runtime",
                            "resourceBytes": 9638,
                            "children": [
                              {
                                "name": "helpers",
                                "resourceBytes": 9473,
                                "children": [
                                  {
                                    "name": "arrayLikeToArray.js",
                                    "resourceBytes": 182
                                  },
                                  {
                                    "name": "arrayWithoutHoles.js",
                                    "resourceBytes": 129
                                  },
                                  {
                                    "name": "asyncToGenerator.js",
                                    "resourceBytes": 386,
                                    "unusedBytes": 294
                                  },
                                  {
                                    "name": "classCallCheck.js",
                                    "resourceBytes": 164
                                  },
                                  {
                                    "name": "createClass.js",
                                    "resourceBytes": 344
                                  },
                                  {
                                    "name": "defineProperty.js",
                                    "resourceBytes": 190,
                                    "unusedBytes": 118
                                  },
                                  {
                                    "name": "interopRequireDefault.js",
                                    "resourceBytes": 121
                                  },
                                  {
                                    "name": "iterableToArray.js",
                                    "resourceBytes": 184,
                                    "unusedBytes": 112
                                  },
                                  {
                                    "name": "nonIterableSpread.js",
                                    "resourceBytes": 244,
                                    "unusedBytes": 167
                                  },
                                  {
                                    "name": "regeneratorRuntime.js",
                                    "resourceBytes": 6630,
                                    "unusedBytes": 5205
                                  },
                                  {
                                    "name": "toConsumableArray.js",
                                    "resourceBytes": 153
                                  },
                                  {
                                    "name": "typeof.js",
                                    "resourceBytes": 371,
                                    "unusedBytes": 112
                                  },
                                  {
                                    "name": "unsupportedIterableToArray.js",
                                    "resourceBytes": 375,
                                    "unusedBytes": 284
                                  }
                                ],
                                "unusedBytes": 6292
                              },
                              {
                                "name": "regenerator/index.js",
                                "resourceBytes": 165
                              }
                            ],
                            "unusedBytes": 6292
                          },
                          {
                            "name": "@ungap/url-search-params/esm/index.js",
                            "resourceBytes": 4397,
                            "unusedBytes": 3304
                          },
                          {
                            "name": "whatwg-fetch/fetch.js",
                            "resourceBytes": 8953,
                            "unusedBytes": 7699
                          },
                          {
                            "name": "polyfill-array-includes/index.js",
                            "resourceBytes": 474,
                            "unusedBytes": 309
                          }
                        ],
                        "unusedBytes": 17604
                      }
                    ]
                  },
                  {
                    "name": "webpack",
                    "resourceBytes": 295,
                    "children": [
                      {
                        "name": "bootstrap",
                        "resourceBytes": 122
                      },
                      {
                        "name": "runtime",
                        "resourceBytes": 173,
                        "unusedBytes": 144,
                        "children": [
                          {
                            "name": "define property getters",
                            "resourceBytes": 101,
                            "unusedBytes": 96
                          },
                          {
                            "name": "hasOwnProperty shorthand",
                            "resourceBytes": 72,
                            "unusedBytes": 48
                          }
                        ]
                      }
                    ],
                    "unusedBytes": 144
                  }
                ]
              },
              {
                "name": "(unmapped)",
                "resourceBytes": 271
              }
            ]
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-loader.js",
            "resourceBytes": 3664,
            "encodedBytes": 1533,
            "unusedBytes": 305
          },
          {
            "name": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otBannerSdk.js",
            "resourceBytes": 541506,
            "encodedBytes": 131285,
            "unusedBytes": 312219
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "resourceBytes": 10912,
            "encodedBytes": 0,
            "unusedBytes": 840
          },
          {
            "name": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otTCF.js",
            "resourceBytes": 64968,
            "encodedBytes": 0,
            "unusedBytes": 15104
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "resourceBytes": 3075,
            "encodedBytes": 1355,
            "unusedBytes": 429
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20userPolymer%3Dwindow.Polymer%3B%2F**%0A%20%20%20*%20%40namespace%20Polymer%0A%20%20%20*%20%40summary%20Polymer%20is%20a%20lightweight%20library%20built%20on%20top%20of%20the%20web%0A%20%20%20*%20%20%20standards-based%20Web%20Components%20API's%2C%20and%20makes%20it%20easy%20to%20build%20your%0A%20%20%20*%20%20%20own%20custom%20HTML%20elements.%0A%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Prototype%20for%20the%20custom%20element.%20It%20must%20contain%0A%20%20%20*%20%20%20an%20%60is%60%20property%20to%20specify%20the%20element%20name.%20Other%20properties%20populate%0A%20%20%20*%20%20%20the%20element%20prototype.%20The%20%60properties%60%2C%20%60observers%60%2C%20%60hostAttributes%60%2C%0A%20%20%20*%20%20%20and%20%60listeners%60%20properties%20are%20processed%20to%20create%20element%20features.%0A%20%20%20*%20%40return%20%7B!Object%7D%20Returns%20a%20custom%20element%20class%20for%20the%20given%20provided%0A%20%20%20*%20%20%20prototype%20%60info%60%20object.%20The%20name%20of%20the%20element%20if%20given%20by%20%60info.is%60.%0A%20%20%20*%2Fwindow.Polymer%3Dfunction(info)%7Breturn%20window.Polymer._polymerFn(info)%3B%7D%3B%2F%2F%20support%20user%20settings%20on%20the%20Polymer%20object%0Aif(userPolymer)%7BObject.assign(Polymer%2CuserPolymer)%3B%7D%2F%2F%20To%20be%20plugged%20by%20legacy%20implementation%20if%20loaded%0A%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%0A%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Prototype%20for%20the%20custom%20element.%20It%20must%20contain%0A%20%20%20*%20%20%20an%20%60is%60%20property%20to%20specify%20the%20element%20name.%20Other%20properties%20populate%0A%20%20%20*%20%20%20the%20element%20prototype.%20The%20%60properties%60%2C%20%60observers%60%2C%20%60hostAttributes%60%2C%0A%20%20%20*%20%20%20and%20%60listeners%60%20properties%20are%20processed%20to%20create%20element%20features.%0A%20%20%20*%20%40return%20%7B!Object%7D%20Returns%20a%20custom%20element%20class%20for%20the%20given%20provided%0A%20%20%20*%20%20%20prototype%20%60info%60%20object.%20The%20name%20of%20the%20element%20if%20given%20by%20%60info.is%60.%0A%20%20%20*%2Fwindow.Polymer._polymerFn%3Dfunction(info)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Athrow%20new%20Error('Load%20polymer.html%20to%20use%20the%20Polymer()%20function.')%3B%7D%3B%2F*%20eslint-enable%20*%2Fwindow.Polymer.version%3D'2.7.0'%3B%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F*%0A%20%20When%20using%20Closure%20Compiler%2C%20JSCompiler_renameProperty(property%2C%20object)%20is%20replaced%20by%20the%20munged%20name%20for%20object%5Bproperty%5D%0A%20%20We%20cannot%20alias%20this%20function%2C%20so%20we%20have%20to%20use%20a%20small%20shim%20that%20has%20the%20same%20behavior%20when%20not%20compiling.%0A%20%20*%2Fwindow.JSCompiler_renameProperty%3Dfunction(prop%2Cobj)%7Breturn%20prop%3B%7D%3B%2F*%20eslint-enable%20*%2F%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fboot.html.js%0A",
            "resourceBytes": 2183,
            "encodedBytes": 0,
            "unusedBytes": 177
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20CSS_URL_RX%3D%2F(url%5C()(%5B%5E)%5D*)(%5C))%2Fg%3Bvar%20ABS_URL%3D%2F(%5E%5C%2F)%7C(%5E%23)%7C(%5E%5B%5Cw-%5Cd%5D*%3A)%2F%3Bvar%20workingURL%3Dvoid%200%3Bvar%20resolveDoc%3Dvoid%200%3B%2F**%0A%20%20%20%20%20*%20Resolves%20the%20given%20URL%20against%20the%20provided%20%60baseUri'.%0A%20%20%20%20%20*%20%0A%20%20%20%20%20*%20Note%20that%20this%20function%20performs%20no%20resolution%20for%20URLs%20that%20start%0A%20%20%20%20%20*%20with%20%60%2F%60%20(absolute%20URLs)%20or%20%60%23%60%20(hash%20identifiers).%20%20For%20general%20purpose%0A%20%20%20%20%20*%20URL%20resolution%2C%20use%20%60window.URL%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.ResolveUrl%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20url%20Input%20URL%20to%20resolve%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%3D%7D%20baseURI%20Base%20URI%20to%20resolve%20the%20URL%20against%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20resolved%20URL%0A%20%20%20%20%20*%2Ffunction%20resolveUrl(url%2CbaseURI)%7Bif(url%26%26ABS_URL.test(url))%7Breturn%20url%3B%7D%2F%2F%20Lazy%20feature%20detection.%0Aif(workingURL%3D%3D%3Dundefined)%7BworkingURL%3Dfalse%3Btry%7Bvar%20u%3Dnew%20URL('b'%2C'http%3A%2F%2Fa')%3Bu.pathname%3D'c%2520d'%3BworkingURL%3Du.href%3D%3D%3D'http%3A%2F%2Fa%2Fc%2520d'%3B%7Dcatch(e)%7B%2F%2F%20silently%20fail%0A%7D%7Dif(!baseURI)%7BbaseURI%3Ddocument.baseURI%7C%7Cwindow.location.href%3B%7Dif(workingURL)%7Breturn%20new%20URL(url%2CbaseURI).href%3B%7D%2F%2F%20Fallback%20to%20creating%20an%20anchor%20into%20a%20disconnected%20document.%0Aif(!resolveDoc)%7BresolveDoc%3Ddocument.implementation.createHTMLDocument('temp')%3BresolveDoc.base%3DresolveDoc.createElement('base')%3BresolveDoc.head.appendChild(resolveDoc.base)%3BresolveDoc.anchor%3DresolveDoc.createElement('a')%3BresolveDoc.body.appendChild(resolveDoc.anchor)%3B%7DresolveDoc.base.href%3DbaseURI%3BresolveDoc.anchor.href%3Durl%3Breturn%20resolveDoc.anchor.href%7C%7Curl%3B%7D%2F**%0A%20%20%20%20%20*%20Resolves%20any%20relative%20URL's%20in%20the%20given%20CSS%20text%20against%20the%20provided%0A%20%20%20%20%20*%20%60ownerDocument%60's%20%60baseURI%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.ResolveUrl%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20cssText%20CSS%20text%20to%20process%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20resolve%20the%20URL%20against%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Processed%20CSS%20text%20with%20resolved%20URL's%0A%20%20%20%20%20*%2Ffunction%20resolveCss(cssText%2CbaseURI)%7Breturn%20cssText.replace(CSS_URL_RX%2Cfunction(m%2Cpre%2Curl%2Cpost)%7Breturn%20pre%2B'%5C''%2BresolveUrl(url.replace(%2F%5B%22'%5D%2Fg%2C'')%2CbaseURI)%2B'%5C''%2Bpost%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20path%20from%20a%20given%20%60url%60.%20The%20path%20includes%20the%20trailing%0A%20%20%20%20%20*%20%60%2F%60%20from%20the%20url.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.ResolveUrl%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20url%20Input%20URL%20to%20transform%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20resolved%20path%0A%20%20%20%20%20*%2Ffunction%20pathFromUrl(url)%7Breturn%20url.substring(0%2Curl.lastIndexOf('%2F')%2B1)%3B%7D%2F**%0A%20%20%20%20%20*%20Module%20with%20utilities%20for%20resolving%20relative%20URL's.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20resolving%20relative%20URL's.%0A%20%20%20%20%20*%2FPolymer.ResolveUrl%3D%7BresolveCss%3AresolveCss%2CresolveUrl%3AresolveUrl%2CpathFromUrl%3ApathFromUrl%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fresolve-url.html.js%0A",
            "resourceBytes": 2672,
            "encodedBytes": 0,
            "unusedBytes": 966
          },
          {
            "name": "data:text/javascript;charset=utf-8,function%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfor(var%20i%3D0%2Carr2%3DArray(arr.length)%3Bi%3Carr.length%3Bi%2B%2B)%7Barr2%5Bi%5D%3Darr%5Bi%5D%3B%7Dreturn%20arr2%3B%7Delse%7Breturn%20Array.from(arr)%3B%7D%7D(function()%7B'use%20strict'%3Bvar%20MODULE_STYLE_LINK_SELECTOR%3D'link%5Brel%3Dimport%5D%5Btype~%3Dcss%5D'%3Bvar%20INCLUDE_ATTR%3D'include'%3Bvar%20SHADY_UNSCOPED_ATTR%3D'shady-unscoped'%3Bfunction%20importModule(moduleId)%7Bvar%2F**%20Polymer.DomModule%20*%2FPolymerDomModule%3DcustomElements.get('dom-module')%3Bif(!PolymerDomModule)%7Breturn%20null%3B%7Dreturn%20PolymerDomModule.import(moduleId)%3B%7Dfunction%20styleForImport(importDoc)%7B%2F%2F%20NOTE%3A%20polyfill%20affordance.%0A%2F%2F%20under%20the%20HTMLImports%20polyfill%2C%20there%20will%20be%20no%20'body'%2C%0A%2F%2F%20but%20the%20import%20pseudo-doc%20can%20be%20used%20directly.%0Avar%20container%3DimportDoc.body%3FimportDoc.body%3AimportDoc%3Bvar%20importCss%3DPolymer.ResolveUrl.resolveCss(container.textContent%2CimportDoc.baseURI)%3Bvar%20style%3Ddocument.createElement('style')%3Bstyle.textContent%3DimportCss%3Breturn%20style%3B%7D%2F**%20%40typedef%20%7B%7Bassetpath%3A%20string%7D%7D%20*%2Fvar%20templateWithAssetPath%3Dvoid%200%3B%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20collection%20CSS%20text%20from%20%60%3Ctemplates%3E%60%2C%20external%0A%20%20%20*%20stylesheets%2C%20and%20%60dom-module%60s.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20collection%20CSS%20text%20from%20various%20sources.%0A%20%20%20*%2Fvar%20StyleGather%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20in%20a%20space-separated%20list%20of%20%60dom-module%60s.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleIds%20List%20of%20dom-module%20id's%20within%20which%20to%0A%20%20%20%20%20*%20search%20for%20css.%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20%3Cstyle%3E%20elements%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModules%3Afunction%20stylesFromModules(moduleIds)%7Bvar%20modules%3DmoduleIds.trim().split(%2F%5Cs%2B%2F)%3Bvar%20styles%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Cmodules.length%3Bi%2B%2B)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromModule(modules%5Bi%5D)))%3B%7Dreturn%20styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20in%20a%20given%20%60dom-module%60.%0A%20%20%20%20%20*%20Styles%20in%20a%20%60dom-module%60%20can%20come%20either%20from%20%60%3Cstyle%3E%60s%20within%20the%0A%20%20%20%20%20*%20first%20%60%3Ctemplate%3E%60%2C%20or%20else%20from%20one%20or%20more%0A%20%20%20%20%20*%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20outside%20the%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20dom-module%20id%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles.%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModule%3Afunction%20stylesFromModule(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Bif(!m)%7Bconsole.warn('Could%20not%20find%20style%20data%20in%20module%20named'%2CmoduleId)%3Breturn%5B%5D%3B%7Dif(m._styles%3D%3D%3Dundefined)%7Bvar%20styles%3D%5B%5D%3B%2F%2F%20module%20imports%3A%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%0Astyles.push.apply(styles%2C_toConsumableArray(this._stylesFromModuleImports(m)))%3B%2F%2F%20include%20css%20from%20the%20first%20template%20in%20the%20module%0Avar%20template%3Dm.querySelector('template')%3Bif(template)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromTemplate(template%2C%2F**%20%40type%20%7BtemplateWithAssetPath%7D%20*%2Fm.assetpath)))%3B%7Dm._styles%3Dstyles%3B%7Dreturn%20m._styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20%60%3Cstyle%3E%60%20elements%20within%20a%20given%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20baseURI%20for%20style%20content%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20styles%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromTemplate%3Afunction%20stylesFromTemplate(template%2CbaseURI)%7Bif(!template._styles)%7Bvar%20styles%3D%5B%5D%3B%2F%2F%20if%20element%20is%20a%20template%2C%20get%20content%20from%20its%20.content%0Avar%20e%24%3Dtemplate.content.querySelectorAll('style')%3Bfor(var%20i%3D0%3Bi%3Ce%24.length%3Bi%2B%2B)%7Bvar%20e%3De%24%5Bi%5D%3B%2F%2F%20support%20style%20sharing%20by%20allowing%20styles%20to%20%22include%22%0A%2F%2F%20other%20dom-modules%20that%20contain%20styling%0Avar%20include%3De.getAttribute(INCLUDE_ATTR)%3Bif(include)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromModules(include).filter(function(item%2Cindex%2Cself)%7Breturn%20self.indexOf(item)%3D%3D%3Dindex%3B%7D)))%3B%7Dif(baseURI)%7Be.textContent%3DPolymer.ResolveUrl.resolveCss(e.textContent%2CbaseURI)%3B%7Dstyles.push(e)%3B%7Dtemplate._styles%3Dstyles%3B%7Dreturn%20template._styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20%20from%20stylesheets%20loaded%20via%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20within%20the%20specified%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20Id%20of%20%60dom-module%60%20to%20gather%20CSS%20from%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles.%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModuleImports%3Afunction%20stylesFromModuleImports(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Breturn%20m%3Fthis._stylesFromModuleImports(m)%3A%5B%5D%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20module%20dom-module%20element%20that%20could%20contain%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20styles%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles%0A%20%20%20%20%20*%2F_stylesFromModuleImports%3Afunction%20_stylesFromModuleImports(module)%7Bvar%20styles%3D%5B%5D%3Bvar%20p%24%3Dmodule.querySelectorAll(MODULE_STYLE_LINK_SELECTOR)%3Bfor(var%20i%3D0%3Bi%3Cp%24.length%3Bi%2B%2B)%7Bvar%20p%3Dp%24%5Bi%5D%3Bif(p.import)%7Bvar%20importDoc%3Dp.import%3Bvar%20unscoped%3Dp.hasAttribute(SHADY_UNSCOPED_ATTR)%3Bif(unscoped%26%26!importDoc._unscopedStyle)%7Bvar%20style%3DstyleForImport(importDoc)%3Bstyle.setAttribute(SHADY_UNSCOPED_ATTR%2C'')%3BimportDoc._unscopedStyle%3Dstyle%3B%7Delse%20if(!importDoc._style)%7BimportDoc._style%3DstyleForImport(importDoc)%3B%7Dstyles.push(unscoped%3FimportDoc._unscopedStyle%3AimportDoc._style)%3B%7D%7Dreturn%20styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20styles%20in%20a%20space-separated%20list%20of%20%60dom-module%60s.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60stylesFromModules%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleIds%20List%20of%20dom-module%20id's%20within%20which%20to%0A%20%20%20%20%20*%20search%20for%20css.%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20%60dom-module%60s%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModules%3Afunction%20cssFromModules(moduleIds)%7Bvar%20modules%3DmoduleIds.trim().split(%2F%5Cs%2B%2F)%3Bvar%20cssText%3D''%3Bfor(var%20i%3D0%3Bi%3Cmodules.length%3Bi%2B%2B)%7BcssText%2B%3Dthis.cssFromModule(modules%5Bi%5D)%3B%7Dreturn%20cssText%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20styles%20in%20a%20given%20%60dom-module%60.%20%20CSS%20in%20a%20%60dom-module%60%0A%20%20%20%20%20*%20can%20come%20either%20from%20%60%3Cstyle%3E%60s%20within%20the%20first%20%60%3Ctemplate%3E%60%2C%20or%20else%0A%20%20%20%20%20*%20from%20one%20or%20more%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20outside%20the%0A%20%20%20%20%20*%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20%60%3Cstyles%3E%60%20processed%20are%20removed%20from%20their%20original%20location.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60styleFromModule%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20dom-module%20id%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20%60dom-module%60%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModule%3Afunction%20cssFromModule(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Bif(m%26%26m._cssText%3D%3D%3Dundefined)%7B%2F%2F%20module%20imports%3A%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%0Avar%20cssText%3Dthis._cssFromModuleImports(m)%3B%2F%2F%20include%20css%20from%20the%20first%20template%20in%20the%20module%0Avar%20t%3Dm.querySelector('template')%3Bif(t)%7BcssText%2B%3Dthis.cssFromTemplate(t%2C%2F**%20%40type%20%7BtemplateWithAssetPath%7D%20*%2Fm.assetpath)%3B%7Dm._cssText%3DcssText%7C%7Cnull%3B%7Dif(!m)%7Bconsole.warn('Could%20not%20find%20style%20data%20in%20module%20named'%2CmoduleId)%3B%7Dreturn%20m%26%26m._cssText%7C%7C''%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20%60%3Cstyles%3E%60%20within%20a%20given%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20%60%3Cstyles%3E%60%20processed%20are%20removed%20from%20their%20original%20location.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60styleFromTemplate%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20resolve%20the%20URL%20against%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20template%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromTemplate%3Afunction%20cssFromTemplate(template%2CbaseURI)%7Bvar%20cssText%3D''%3Bvar%20e%24%3Dthis.stylesFromTemplate(template%2CbaseURI)%3B%2F%2F%20if%20element%20is%20a%20template%2C%20get%20content%20from%20its%20.content%0Afor(var%20i%3D0%3Bi%3Ce%24.length%3Bi%2B%2B)%7Bvar%20e%3De%24%5Bi%5D%3Bif(e.parentNode)%7Be.parentNode.removeChild(e)%3B%7DcssText%2B%3De.textContent%3B%7Dreturn%20cssText%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20from%20stylesheets%20loaded%20via%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%0A%20%20%20%20%20*%20links%20within%20the%20specified%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60stylesFromModuleImports%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20Id%20of%20%60dom-module%60%20to%20gather%20CSS%20from%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20links%20in%20specified%20%60dom-module%60%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModuleImports%3Afunction%20cssFromModuleImports(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Breturn%20m%3Fthis._cssFromModuleImports(m)%3A''%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20module%20dom-module%20element%20that%20could%20contain%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20styles%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20links%20in%20the%20dom-module%0A%20%20%20%20%20*%2F_cssFromModuleImports%3Afunction%20_cssFromModuleImports(module)%7Bvar%20cssText%3D''%3Bvar%20styles%3Dthis._stylesFromModuleImports(module)%3Bfor(var%20i%3D0%3Bi%3Cstyles.length%3Bi%2B%2B)%7BcssText%2B%3Dstyles%5Bi%5D.textContent%3B%7Dreturn%20cssText%3B%7D%7D%3BPolymer.StyleGather%3DStyleGather%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fstyle-gather.html.js%0A",
            "resourceBytes": 9256,
            "encodedBytes": 0,
            "unusedBytes": 4166
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20attr%3D'include'%3Bvar%20CustomStyleInterface%3Dwindow.ShadyCSS.CustomStyleInterface%3B%2F**%0A%20%20%20*%20Custom%20element%20for%20defining%20styles%20in%20the%20main%20document%20that%20can%20take%0A%20%20%20*%20advantage%20of%20%5Bshady%20DOM%5D(https%3A%2F%2Fgithub.com%2Fwebcomponents%2Fshadycss)%20shims%0A%20%20%20*%20for%20style%20encapsulation%2C%20custom%20properties%2C%20and%20custom%20mixins.%0A%20%20%20*%0A%20%20%20*%20-%20Document%20styles%20defined%20in%20a%20%60%3Ccustom-style%3E%60%20are%20shimmed%20to%20ensure%20they%0A%20%20%20*%20%20%20do%20not%20leak%20into%20local%20DOM%20when%20running%20on%20browsers%20without%20native%0A%20%20%20*%20%20%20Shadow%20DOM.%0A%20%20%20*%20-%20Custom%20properties%20can%20be%20defined%20in%20a%20%60%3Ccustom-style%3E%60.%20Use%20the%20%60html%60%20selector%0A%20%20%20*%20%20%20to%20define%20custom%20properties%20that%20apply%20to%20all%20custom%20elements.%0A%20%20%20*%20-%20Custom%20mixins%20can%20be%20defined%20in%20a%20%60%3Ccustom-style%3E%60%2C%20if%20you%20import%20the%20optional%0A%20%20%20*%20%20%20%5Bapply%20shim%5D(https%3A%2F%2Fgithub.com%2Fwebcomponents%2Fshadycss%23about-applyshim)%0A%20%20%20*%20%20%20(%60shadycss%2Fapply-shim.html%60).%0A%20%20%20*%0A%20%20%20*%20To%20use%3A%0A%20%20%20*%0A%20%20%20*%20-%20Import%20%60custom-style.html%60.%0A%20%20%20*%20-%20Place%20a%20%60%3Ccustom-style%3E%60%20element%20in%20the%20main%20document%2C%20wrapping%20an%20inline%20%60%3Cstyle%3E%60%20tag%20that%0A%20%20%20*%20%20%20contains%20the%20CSS%20rules%20you%20want%20to%20shim.%0A%20%20%20*%0A%20%20%20*%20For%20example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3C!--%20import%20apply%20shim--only%20required%20if%20using%20mixins%20--%3E%0A%20%20%20*%20%3Clink%20rel%3D%22import%22%20href%3D%22bower_components%2Fshadycss%2Fapply-shim.html%22%3E%0A%20%20%20*%20%3C!--%20import%20custom-style%20element%20--%3E%0A%20%20%20*%20%3Clink%20rel%3D%22import%22%20href%3D%22bower_components%2Fpolymer%2Flib%2Felements%2Fcustom-style.html%22%3E%0A%20%20%20*%0A%20%20%20*%20%3Ccustom-style%3E%0A%20%20%20*%20%20%20%3Cstyle%3E%0A%20%20%20*%20%20%20%20%20html%20%7B%0A%20%20%20*%20%20%20%20%20%20%20--custom-color%3A%20blue%3B%0A%20%20%20*%20%20%20%20%20%20%20--custom-mixin%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%20color%3A%20red%3B%0A%20%20%20*%20%20%20%20%20%20%20%7D%3B%0A%20%20%20*%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%3C%2Fstyle%3E%0A%20%20%20*%20%3C%2Fcustom-style%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20HTMLElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20for%20defining%20styles%20in%20the%20main%20document%20that%20can%0A%20%20%20*%20%20%20take%20advantage%20of%20Polymer's%20style%20scoping%20and%20custom%20properties%20shims.%0A%20%20%20*%2Fvar%20CustomStyle%3Dfunction(_HTMLElement)%7B_inherits(CustomStyle%2C_HTMLElement)%3Bfunction%20CustomStyle()%7B_classCallCheck(this%2CCustomStyle)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(CustomStyle.__proto__%7C%7CObject.getPrototypeOf(CustomStyle)).call(this))%3B_this._style%3Dnull%3BCustomStyleInterface.addCustomStyle(_this)%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20light-DOM%20%60%3Cstyle%3E%60%20child%20this%20element%20wraps.%20%20Upon%20first%0A%20%20%20%20%20*%20call%20any%20style%20modules%20referenced%20via%20the%20%60include%60%20attribute%20will%20be%0A%20%20%20%20%20*%20concatenated%20to%20this%20element's%20%60%3Cstyle%3E%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BHTMLStyleElement%7D%20This%20element's%20light-DOM%20%60%3Cstyle%3E%60%0A%20%20%20%20%20*%2F_createClass(CustomStyle%2C%5B%7Bkey%3A'getStyle'%2Cvalue%3Afunction%20getStyle()%7Bif(this._style)%7Breturn%20this._style%3B%7Dvar%20style%3D%2F**%20%40type%20%7BHTMLStyleElement%7D%20*%2Fthis.querySelector('style')%3Bif(!style)%7Breturn%20null%3B%7Dthis._style%3Dstyle%3Bvar%20include%3Dstyle.getAttribute(attr)%3Bif(include)%7Bstyle.removeAttribute(attr)%3Bstyle.textContent%3DPolymer.StyleGather.cssFromModules(include)%2Bstyle.textContent%3B%7D%2F*%0A%20%20%20%20%20%20HTML%20Imports%20styling%20the%20main%20document%20are%20deprecated%20in%20Chrome%0A%20%20%20%20%20%20https%3A%2F%2Fcrbug.com%2F523952%0A%0A%20%20%20%20%20%20If%20this%20element%20is%20not%20in%20the%20main%20document%2C%20then%20it%20must%20be%20in%20an%20HTML%20Import%20document.%0A%20%20%20%20%20%20In%20that%20case%2C%20move%20the%20custom%20style%20to%20the%20main%20document.%0A%0A%20%20%20%20%20%20The%20ordering%20of%20%60%3Ccustom-style%3E%60%20should%20stay%20the%20same%20as%20when%20loaded%20by%20HTML%20Imports%2C%20but%20there%20may%20be%20odd%0A%20%20%20%20%20%20cases%20of%20ordering%20w.r.t%20the%20main%20document%20styles.%0A%20%20%20%20%20%20*%2Fif(this.ownerDocument!%3D%3Dwindow.document)%7Bwindow.document.head.appendChild(this)%3B%7Dreturn%20this._style%3B%7D%7D%5D)%3Breturn%20CustomStyle%3B%7D(HTMLElement)%3Bwindow.customElements.define('custom-style'%2CCustomStyle)%3B%2F**%20%40const%20*%2FPolymer.CustomStyle%3DCustomStyle%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fcustom-style.html.js%0A",
            "resourceBytes": 5009,
            "encodedBytes": 0,
            "unusedBytes": 0
          },
          {
            "name": "data:text/javascript;charset=utf-8,'use%20strict'%3Bvar%20siteColor%3Dwindow.ga_data.site.colors.siteColor%3Bif(siteColor!%3D%3Dundefined)%7Bdocument.documentElement.style.setProperty('--color-theme'%2CsiteColor)%3B%7D%0A%2F%2F%23%20sourceMappingURL%3D..%2F..%2Fmaps%2Fgallium%2Fthemes%2Funiversal.html_script_0.js.map%0A%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fgallium%2Fthemes%2Funiversal.html.js%0A",
            "resourceBytes": 361,
            "encodedBytes": 0,
            "children": [
              {
                "name": "gallium/themes/universal.html_script_0.js",
                "resourceBytes": 149
              },
              {
                "name": "(unmapped)",
                "resourceBytes": 212
              }
            ]
          },
          {
            "name": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js",
            "resourceBytes": 10617,
            "encodedBytes": 4261,
            "unusedBytes": 3142
          },
          {
            "name": "data:text/javascript;charset=utf-8,%2F**%20%40suppress%20%7Bdeprecated%7D%20*%2F(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Sets%20the%20global%2C%20legacy%20settings.%0A%20%20%20*%0A%20%20%20*%20%40deprecated%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.Settings%3DPolymer.Settings%7C%7C%7B%7D%3BPolymer.Settings.useShadow%3D!window.ShadyDOM%3BPolymer.Settings.useNativeCSSProperties%3DBoolean(!window.ShadyCSS%7C%7Cwindow.ShadyCSS.nativeCss)%3BPolymer.Settings.useNativeCustomElements%3D!window.customElements.polyfillWrapFlushCallback%3B%2F**%0A%20%20%20*%20Globally%20settable%20property%20that%20is%20automatically%20assigned%20to%0A%20%20%20*%20%60Polymer.ElementMixin%60%20instances%2C%20useful%20for%20binding%20in%20templates%20to%0A%20%20%20*%20make%20URL's%20relative%20to%20an%20application's%20root.%20%20Defaults%20to%20the%20main%0A%20%20%20*%20document%20URL%2C%20but%20can%20be%20overridden%20by%20users.%20%20It%20may%20be%20useful%20to%20set%0A%20%20%20*%20%60Polymer.rootPath%60%20to%20provide%20a%20stable%20application%20mount%20path%20when%0A%20%20%20*%20using%20client%20side%20routing.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.rootPath%3DPolymer.rootPath%7C%7CPolymer.ResolveUrl.pathFromUrl(document.baseURI%7C%7Cwindow.location.href)%3B%2F**%0A%20%20%20*%20Sets%20the%20global%20rootPath%20property%20used%20by%20%60Polymer.ElementMixin%60%20and%0A%20%20%20*%20available%20via%20%60Polymer.rootPath%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20new%20root%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setRootPath%3Dfunction(path)%7BPolymer.rootPath%3Dpath%3B%7D%3B%2F**%0A%20%20%20*%20A%20global%20callback%20used%20to%20sanitize%20any%20value%20before%20inserting%20it%20into%20the%20DOM.%20The%20callback%20signature%20is%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20Polymer%20%3D%20%7B%0A%20%20%20*%20%20%20%20%20%20%20sanitizeDOMValue%3A%20function(value%2C%20name%2C%20type%2C%20node)%20%7B%20...%20%7D%0A%20%20%20*%20%20%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20Where%3A%0A%20%20%20*%0A%20%20%20*%20%60value%60%20is%20the%20value%20to%20sanitize.%0A%20%20%20*%20%60name%60%20is%20the%20name%20of%20an%20attribute%20or%20property%20(for%20example%2C%20href).%0A%20%20%20*%20%60type%60%20indicates%20where%20the%20value%20is%20being%20inserted%3A%20one%20of%20property%2C%20attribute%2C%20or%20text.%0A%20%20%20*%20%60node%60%20is%20the%20node%20where%20the%20value%20is%20being%20inserted.%0A%20%20%20*%0A%20%20%20*%20%40type%20%7B(function(*%2Cstring%2Cstring%2CNode)%3A*)%7Cundefined%7D%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.sanitizeDOMValue%3DPolymer.sanitizeDOMValue%7C%7Cnull%3B%2F**%0A%20%20%20*%20Sets%20the%20global%20sanitizeDOMValue%20available%20via%20%60Polymer.sanitizeDOMValue%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B(function(*%2Cstring%2Cstring%2CNode)%3A*)%7Cundefined%7D%20newSanitizeDOMValue%20the%20global%20sanitizeDOMValue%20callback%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setSanitizeDOMValue%3Dfunction(newSanitizeDOMValue)%7BPolymer.sanitizeDOMValue%3DnewSanitizeDOMValue%3B%7D%3B%2F**%0A%20%20%20*%20Globally%20settable%20property%20to%20make%20Polymer%20Gestures%20use%20passive%20TouchEvent%20listeners%20when%20recognizing%20gestures.%0A%20%20%20*%20When%20set%20to%20%60true%60%2C%20gestures%20made%20from%20touch%20will%20not%20be%20able%20to%20prevent%20scrolling%2C%20allowing%20for%20smoother%0A%20%20%20*%20scrolling%20performance.%0A%20%20%20*%20Defaults%20to%20%60false%60%20for%20backwards%20compatibility.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.passiveTouchGestures%3DPolymer.passiveTouchGestures%7C%7Cfalse%3B%2F**%0A%20%20%20*%20Sets%20%60passiveTouchGestures%60%20globally%20for%20all%20elements%20using%20Polymer%20Gestures.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bboolean%7D%20usePassive%20enable%20or%20disable%20passive%20touch%20gestures%20globally%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setPassiveTouchGestures%3Dfunction(usePassive)%7BPolymer.passiveTouchGestures%3DusePassive%3B%7D%3BPolymer.legacyOptimizations%3DPolymer.legacyOptimizations%7C%7Cwindow.PolymerSettings%26%26window.PolymerSettings.legacyOptimizations%7C%7Cfalse%3B%2F**%0A%20%20%20*%20Sets%20%60legacyOptimizations%60%20globally%20for%20all%20elements.%20Enables%0A%20%20%20*%20optimizations%20when%20only%20legacy%20Polymer()%20style%20elements%20are%20used.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bboolean%7D%20useLegacyOptimizations%20enable%20or%20disable%20legacy%20optimizations%20globally.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setLegacyOptimizations%3Dfunction(useLegacyOptimizations)%7BPolymer.legacyOptimizations%3DuseLegacyOptimizations%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fsettings.html.js%0A",
            "resourceBytes": 3665,
            "encodedBytes": 0,
            "unusedBytes": 261
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20unique%20global%20id%20for%20deduping%20mixins.%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40extends%20%7BFunction%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20MixinFunction()%7B%7D%2F**%20%40type%20%7B(WeakMap%20%7C%20undefined)%7D%20*%2FMixinFunction.prototype.__mixinApplications%3B%2F**%20%40type%20%7B(Object%20%7C%20undefined)%7D%20*%2FMixinFunction.prototype.__mixinSet%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%0A%20%20%20*%20Wraps%20an%20ES6%20class%20expression%20mixin%20such%20that%20the%20mixin%20is%20only%20applied%0A%20%20%20*%20if%20it%20has%20not%20already%20been%20applied%20its%20base%20argument.%20Also%20memoizes%20mixin%0A%20%20%20*%20applications.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40template%20T%0A%20%20%20*%20%40param%20%7BT%7D%20mixin%20ES6%20class%20expression%20mixin%20to%20wrap%0A%20%20%20*%20%40return%20%7BT%7D%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2FPolymer.dedupingMixin%3Dfunction(mixin)%7Bvar%20mixinApplications%3D%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fmixin.__mixinApplications%3Bif(!mixinApplications)%7BmixinApplications%3Dnew%20WeakMap()%3B%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fmixin.__mixinApplications%3DmixinApplications%3B%7D%2F%2F%20maintain%20a%20unique%20id%20for%20each%20mixin%0Avar%20mixinDedupeId%3DdedupeId%2B%2B%3Bfunction%20dedupingMixin(base)%7Bvar%20baseSet%3D%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fbase.__mixinSet%3Bif(baseSet%26%26baseSet%5BmixinDedupeId%5D)%7Breturn%20base%3B%7Dvar%20map%3DmixinApplications%3Bvar%20extended%3Dmap.get(base)%3Bif(!extended)%7Bextended%3D%2F**%20%40type%20%7B!Function%7D%20*%2Fmixin(base)%3Bmap.set(base%2Cextended)%3B%7D%2F%2F%20copy%20inherited%20mixin%20set%20from%20the%20extended%20class%2C%20or%20the%20base%20class%0A%2F%2F%20NOTE%3A%20we%20avoid%20use%20of%20Set%20here%20because%20some%20browser%20(IE11)%0A%2F%2F%20cannot%20extend%20a%20base%20Set%20via%20the%20constructor.%0Avar%20mixinSet%3DObject.create(%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fextended.__mixinSet%7C%7CbaseSet%7C%7Cnull)%3BmixinSet%5BmixinDedupeId%5D%3Dtrue%3B%2F**%20%40type%20%7B!MixinFunction%7D%20*%2Fextended.__mixinSet%3DmixinSet%3Breturn%20extended%3B%7Dreturn(%2F**%20%40type%20%7BT%7D%20*%2FdedupingMixin)%3B%7D%3B%2F*%20eslint-enable%20valid-jsdoc%20*%2F%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fmixin.html.js%0A",
            "resourceBytes": 1863,
            "encodedBytes": 0,
            "unusedBytes": 26
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20modules%3D%7B%7D%3Bvar%20lcModules%3D%7B%7D%3Bfunction%20setModule(id%2Cmodule)%7B%2F%2F%20store%20id%20separate%20from%20lowercased%20id%20so%20that%0A%2F%2F%20in%20all%20cases%20mixedCase%20id%20will%20stored%20distinctly%0A%2F%2F%20and%20lowercase%20version%20is%20a%20fallback%0Amodules%5Bid%5D%3DlcModules%5Bid.toLowerCase()%5D%3Dmodule%3B%7Dfunction%20findModule(id)%7Breturn%20modules%5Bid%5D%7C%7ClcModules%5Bid.toLowerCase()%5D%3B%7Dfunction%20styleOutsideTemplateCheck(inst)%7Bif(inst.querySelector('style'))%7Bconsole.warn('dom-module%20%25s%20has%20style%20outside%20template'%2Cinst.id)%3B%7D%7D%2F**%0A%20%20%20*%20The%20%60dom-module%60%20element%20registers%20the%20dom%20it%20contains%20to%20the%20name%20given%0A%20%20%20*%20by%20the%20module's%20id%20attribute.%20It%20provides%20a%20unified%20database%20of%20dom%0A%20%20%20*%20accessible%20via%20its%20static%20%60import%60%20API.%0A%20%20%20*%0A%20%20%20*%20A%20key%20use%20case%20of%20%60dom-module%60%20is%20for%20providing%20custom%20element%20%60%3Ctemplate%3E%60s%0A%20%20%20*%20via%20HTML%20imports%20that%20are%20parsed%20by%20the%20native%20HTML%20parser%2C%20that%20can%20be%0A%20%20%20*%20relocated%20during%20a%20bundling%20pass%20and%20still%20looked%20up%20by%20%60id%60.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdom-module%20id%3D%22foo%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Cimg%20src%3D%22stuff.png%22%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-module%3E%0A%20%20%20*%0A%20%20%20*%20Then%20in%20code%20in%20some%20other%20location%20that%20cannot%20access%20the%20dom-module%20above%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20let%20img%20%3D%20customElements.get('dom-module').import('foo'%2C%20'img')%3B%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20HTMLElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20provides%20a%20registry%20of%20relocatable%20DOM%20content%0A%20%20%20*%20%20%20by%20%60id%60%20that%20is%20agnostic%20to%20bundling.%0A%20%20%20*%20%40unrestricted%0A%20%20%20*%2Fvar%20DomModule%3Dfunction(_HTMLElement)%7B_inherits(DomModule%2C_HTMLElement)%3Bfunction%20DomModule()%7B_classCallCheck(this%2CDomModule)%3Breturn%20_possibleConstructorReturn(this%2C(DomModule.__proto__%7C%7CObject.getPrototypeOf(DomModule)).apply(this%2Carguments))%3B%7D_createClass(DomModule%2C%5B%7Bkey%3A'attributeChangedCallback'%2C%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7Bthis.register()%3B%7D%7D%2F*%20eslint-enable%20no-unused-args%20*%2F%2F**%0A%20%20%20%20%20*%20The%20absolute%20URL%20of%20the%20original%20location%20of%20this%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20value%20will%20differ%20from%20this%20element's%20%60ownerDocument%60%20in%20the%0A%20%20%20%20%20*%20following%20ways%3A%0A%20%20%20%20%20*%20-%20Takes%20into%20account%20any%20%60assetpath%60%20attribute%20added%20during%20bundling%0A%20%20%20%20%20*%20%20%20to%20indicate%20the%20original%20location%20relative%20to%20the%20bundled%20location%0A%20%20%20%20%20*%20-%20Uses%20the%20HTMLImports%20polyfill's%20%60importForElement%60%20API%20to%20ensure%0A%20%20%20%20%20*%20%20%20the%20path%20is%20relative%20to%20the%20import%20document's%20location%20since%0A%20%20%20%20%20*%20%20%20%60ownerDocument%60%20is%20not%20currently%20polyfilled%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'register'%2C%2F**%0A%20%20%20%20%20*%20Registers%20the%20dom-module%20at%20a%20given%20id.%20This%20method%20should%20only%20be%20called%0A%20%20%20%20%20*%20when%20a%20dom-module%20is%20imperatively%20created.%20For%0A%20%20%20%20%20*%20example%2C%20%60document.createElement('dom-module').register('foo')%60.%0A%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20id%20The%20id%20at%20which%20to%20register%20the%20dom-module.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fvalue%3Afunction%20register(id)%7Bid%3Did%7C%7Cthis.id%3Bif(id)%7B%2F%2F%20Under%20strictTemplatePolicy%2C%20reject%20and%20null%20out%20any%20re-registered%0A%2F%2F%20dom-module%20since%20it%20is%20ambiguous%20whether%20first-in%20or%20last-in%20is%20trusted%20%0Aif(Polymer.strictTemplatePolicy%26%26findModule(id)!%3D%3Dundefined)%7BsetModule(id%2Cnull)%3Bthrow%20new%20Error('strictTemplatePolicy%3A%20dom-module%20'%2Bid%2B'%20re-registered')%3B%7Dthis.id%3Did%3BsetModule(id%2Cthis)%3BstyleOutsideTemplateCheck(this)%3B%7D%7D%7D%2C%7Bkey%3A'assetpath'%2Cget%3Afunction%20get()%7B%2F%2F%20Don't%20override%20existing%20assetpath.%0Aif(!this.__assetpath)%7B%2F%2F%20note%3A%20assetpath%20set%20via%20an%20attribute%20must%20be%20relative%20to%20this%0A%2F%2F%20element's%20location%3B%20accomodate%20polyfilled%20HTMLImports%0Avar%20owner%3Dwindow.HTMLImports%26%26HTMLImports.importForElement%3FHTMLImports.importForElement(this)%7C%7Cdocument%3Athis.ownerDocument%3Bvar%20url%3DPolymer.ResolveUrl.resolveUrl(this.getAttribute('assetpath')%7C%7C''%2Cowner.baseURI)%3Bthis.__assetpath%3DPolymer.ResolveUrl.pathFromUrl(url)%3B%7Dreturn%20this.__assetpath%3B%7D%7D%5D%2C%5B%7Bkey%3A'import'%2C%2F**%0A%20%20%20%20%20*%20Retrieves%20the%20element%20specified%20by%20the%20css%20%60selector%60%20in%20the%20module%0A%20%20%20%20%20*%20registered%20by%20%60id%60.%20For%20example%2C%20this.import('foo'%2C%20'img')%3B%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20id%20The%20id%20of%20the%20dom-module%20in%20which%20to%20search.%0A%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20selector%20The%20css%20selector%20by%20which%20to%20find%20the%20element.%0A%20%20%20%20%20*%20%40return%20%7BElement%7D%20Returns%20the%20element%20which%20matches%20%60selector%60%20in%20the%0A%20%20%20%20%20*%20module%20registered%20at%20the%20specified%20%60id%60.%0A%20%20%20%20%20*%2Fvalue%3Afunction%20_import(id%2Cselector)%7Bif(id)%7Bvar%20m%3DfindModule(id)%3Bif(m%26%26selector)%7Breturn%20m.querySelector(selector)%3B%7Dreturn%20m%3B%7Dreturn%20null%3B%7D%7D%2C%7Bkey%3A'observedAttributes'%2Cget%3Afunction%20get()%7Breturn%5B'id'%5D%3B%7D%7D%5D)%3Breturn%20DomModule%3B%7D(HTMLElement)%3BDomModule.prototype%5B'modules'%5D%3Dmodules%3BcustomElements.define('dom-module'%2CDomModule)%3B%2F**%20%40const%20*%2FPolymer.DomModule%3DDomModule%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-module.html.js%0A",
            "resourceBytes": 6199,
            "encodedBytes": 0,
            "unusedBytes": 2085
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20manipulating%20structured%20data%20path%20strings.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20manipulating%20structured%20data%20path%20strings.%0A%20%20%20*%2Fvar%20Path%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20given%20string%20is%20a%20structured%20data%20path%20(has%20dots).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isPath('foo.bar.baz')%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isPath('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20string%20contained%20one%20or%20more%20dots%0A%20%20%20%20%20*%2FisPath%3Afunction%20isPath(path)%7Breturn%20path.indexOf('.')%3E%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20root%20property%20name%20for%20the%20given%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.root('foo.bar.baz')%20%2F%2F%20'foo'%0A%20%20%20%20%20*%20Polymer.Path.root('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20'foo'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Root%20property%20name%0A%20%20%20%20%20*%2Froot%3Afunction%20root(path)%7Bvar%20dotIndex%3Dpath.indexOf('.')%3Bif(dotIndex%3D%3D%3D-1)%7Breturn%20path%3B%7Dreturn%20path.slice(0%2CdotIndex)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Given%20%60base%60%20is%20%60foo.bar%60%2C%20%60foo%60%20is%20an%20ancestor%2C%20%60foo.bar%60%20is%20not%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20given%20path%20is%20an%20ancestor%20of%20the%20base%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo')%20%20%20%20%20%20%20%20%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo.bar')%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo.bar.baz')%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20an%20ancestor%20of%20%60base%60.%0A%20%20%20%20%20*%2FisAncestor%3Afunction%20isAncestor(base%2Cpath)%7B%2F%2F%20%20%20%20%20base.startsWith(path%20%2B%20'.')%3B%0Areturn%20base.indexOf(path%2B'.')%3D%3D%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Given%20%60base%60%20is%20%60foo.bar%60%2C%20%60foo.bar.baz%60%20is%20an%20descendant%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo.bar.baz')%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo.bar')%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20a%20descendant%20of%20%60base%60.%0A%20%20%20%20%20*%2FisDescendant%3Afunction%20isDescendant(base%2Cpath)%7B%2F%2F%20%20%20%20%20path.startsWith(base%20%2B%20'.')%3B%0Areturn%20path.indexOf(base%2B'.')%3D%3D%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Replaces%20a%20previous%20base%20path%20with%20a%20new%20base%20path%2C%20preserving%20the%0A%20%20%20%20%20*%20remainder%20of%20the%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20User%20must%20ensure%20%60path%60%20has%20a%20prefix%20of%20%60base%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.translate('foo.bar'%2C%20'zot'%2C%20'foo.bar.baz')%20%2F%2F%20'zot.baz'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Current%20base%20string%20to%20remove%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20newBase%20New%20base%20string%20to%20replace%20with%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20to%20translate%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Translated%20string%0A%20%20%20%20%20*%2Ftranslate%3Afunction%20translate(base%2CnewBase%2Cpath)%7Breturn%20newBase%2Bpath.slice(base.length)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20equal%20to%20%60base%60%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fmatches%3Afunction%20matches(base%2Cpath)%7Breturn%20base%3D%3D%3Dpath%7C%7Cthis.isAncestor(base%2Cpath)%7C%7Cthis.isDescendant(base%2Cpath)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Converts%20array-based%20paths%20to%20flattened%20path.%20%20String-based%20paths%0A%20%20%20%20%20*%20are%20returned%20as-is.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.normalize(%5B'foo.bar'%2C%200%2C%20'baz'%5D)%20%20%2F%2F%20'foo.bar.0.baz'%0A%20%20%20%20%20*%20Polymer.Path.normalize('foo.bar.0.baz')%20%20%20%20%20%20%20%20%2F%2F%20'foo.bar.0.baz'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Input%20path%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Flattened%20path%0A%20%20%20%20%20*%2Fnormalize%3Afunction%20normalize(path)%7Bif(Array.isArray(path))%7Bvar%20parts%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Cpath.length%3Bi%2B%2B)%7Bvar%20args%3Dpath%5Bi%5D.toString().split('.')%3Bfor(var%20j%3D0%3Bj%3Cargs.length%3Bj%2B%2B)%7Bparts.push(args%5Bj%5D)%3B%7D%7Dreturn%20parts.join('.')%3B%7Delse%7Breturn%20path%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Splits%20a%20path%20into%20an%20array%20of%20property%20names.%20Accepts%20either%20arrays%0A%20%20%20%20%20*%20of%20path%20parts%20or%20strings.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.split(%5B'foo.bar'%2C%200%2C%20'baz'%5D)%20%20%2F%2F%20%5B'foo'%2C%20'bar'%2C%20'0'%2C%20'baz'%5D%0A%20%20%20%20%20*%20Polymer.Path.split('foo.bar.0.baz')%20%20%20%20%20%20%20%20%2F%2F%20%5B'foo'%2C%20'bar'%2C%20'0'%2C%20'baz'%5D%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Input%20path%0A%20%20%20%20%20*%20%40return%20%7B!Array%3Cstring%3E%7D%20Array%20of%20path%20parts%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%20%40suppress%20%7BcheckTypes%7D%0A%20%20%20%20%20*%2Fsplit%3Afunction%20split(path)%7Bif(Array.isArray(path))%7Breturn%20this.normalize(path).split('.')%3B%7Dreturn%20path.toString().split('.')%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Reads%20a%20value%20from%20a%20path.%20%20If%20any%20sub-property%20in%20the%20path%20is%20%60undefined%60%2C%0A%20%20%20%20%20*%20this%20method%20returns%20%60undefined%60%20(will%20never%20throw.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20root%20Object%20from%20which%20to%20dereference%20path%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20read%0A%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20info%20If%20an%20object%20is%20provided%20to%20%60info%60%2C%20the%20normalized%0A%20%20%20%20%20*%20%20(flattened)%20path%20will%20be%20set%20to%20%60info.path%60.%0A%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20path%2C%20or%20%60undefined%60%20if%20the%20path%20could%20not%20be%0A%20%20%20%20%20*%20%20fully%20dereferenced.%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fget%3Afunction%20get(root%2Cpath%2Cinfo)%7Bvar%20prop%3Droot%3Bvar%20parts%3Dthis.split(path)%3B%2F%2F%20Loop%20over%20path%20parts%5B0..n-1%5D%20and%20dereference%0Afor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bif(!prop)%7Breturn%3B%7Dvar%20part%3Dparts%5Bi%5D%3Bprop%3Dprop%5Bpart%5D%3B%7Dif(info)%7Binfo.path%3Dparts.join('.')%3B%7Dreturn%20prop%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Sets%20a%20value%20to%20a%20path.%20%20If%20any%20sub-property%20in%20the%20path%20is%20%60undefined%60%2C%0A%20%20%20%20%20*%20this%20method%20will%20no-op.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20root%20Object%20from%20which%20to%20dereference%20path%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20to%20path%0A%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20The%20normalized%20version%20of%20the%20input%20path%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fset%3Afunction%20set(root%2Cpath%2Cvalue)%7Bvar%20prop%3Droot%3Bvar%20parts%3Dthis.split(path)%3Bvar%20last%3Dparts%5Bparts.length-1%5D%3Bif(parts.length%3E1)%7B%2F%2F%20Loop%20over%20path%20parts%5B0..n-2%5D%20and%20dereference%0Afor(var%20i%3D0%3Bi%3Cparts.length-1%3Bi%2B%2B)%7Bvar%20part%3Dparts%5Bi%5D%3Bprop%3Dprop%5Bpart%5D%3Bif(!prop)%7Breturn%3B%7D%7D%2F%2F%20Set%20value%20to%20object%20at%20end%20of%20path%0Aprop%5Blast%5D%3Dvalue%3B%7Delse%7B%2F%2F%20Simple%20property%20set%0Aprop%5Bpath%5D%3Dvalue%3B%7Dreturn%20parts.join('.')%3B%7D%7D%3B%2F**%0A%20%20%20*%20Returns%20true%20if%20the%20given%20string%20is%20a%20structured%20data%20path%20(has%20dots).%0A%20%20%20*%0A%20%20%20*%20This%20function%20is%20deprecated.%20%20Use%20%60Polymer.Path.isPath%60%20instead.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20Polymer.Path.isDeep('foo.bar.baz')%20%2F%2F%20true%0A%20%20%20*%20Polymer.Path.isDeep('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40deprecated%0A%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20string%20contained%20one%20or%20more%20dots%0A%20%20%20*%2FPath.isDeep%3DPath.isPath%3BPolymer.Path%3DPath%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fpath.html.js%0A",
            "resourceBytes": 7136,
            "encodedBytes": 0,
            "unusedBytes": 1536
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20caseMap%3D%7B%7D%3Bvar%20DASH_TO_CAMEL%3D%2F-%5Ba-z%5D%2Fg%3Bvar%20CAMEL_TO_DASH%3D%2F(%5BA-Z%5D)%2Fg%3B%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20converting%20between%20%22dash-case%22%20and%20%22camelCase%22%0A%20%20%20*%20identifiers.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20utilities%20for%20converting%20between%20%22dash-case%22%0A%20%20%20*%20%20%20and%20%22camelCase%22.%0A%20%20%20*%2Fvar%20CaseMap%3D%7B%2F**%0A%20%20%20%20%20*%20Converts%20%22dash-case%22%20identifier%20(e.g.%20%60foo-bar-baz%60)%20to%20%22camelCase%22%0A%20%20%20%20%20*%20(e.g.%20%60fooBarBaz%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.CaseMap%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20dash%20Dash-case%20identifier%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Camel-case%20representation%20of%20the%20identifier%0A%20%20%20%20%20*%2FdashToCamelCase%3Afunction%20dashToCamelCase(dash)%7Breturn%20caseMap%5Bdash%5D%7C%7C(caseMap%5Bdash%5D%3Ddash.indexOf('-')%3C0%3Fdash%3Adash.replace(DASH_TO_CAMEL%2Cfunction(m)%7Breturn%20m%5B1%5D.toUpperCase()%3B%7D))%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Converts%20%22camelCase%22%20identifier%20(e.g.%20%60fooBarBaz%60)%20to%20%22dash-case%22%0A%20%20%20%20%20*%20(e.g.%20%60foo-bar-baz%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.CaseMap%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20camel%20Camel-case%20identifier%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Dash-case%20representation%20of%20the%20identifier%0A%20%20%20%20%20*%2FcamelToDashCase%3Afunction%20camelToDashCase(camel)%7Breturn%20caseMap%5Bcamel%5D%7C%7C(caseMap%5Bcamel%5D%3Dcamel.replace(CAMEL_TO_DASH%2C'-%241').toLowerCase())%3B%7D%7D%3BPolymer.CaseMap%3DCaseMap%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fcase-map.html.js%0A",
            "resourceBytes": 1394,
            "encodedBytes": 0,
            "unusedBytes": 163
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20Microtask%20implemented%20using%20Mutation%20Observer%0Avar%20microtaskCurrHandle%3D0%3Bvar%20microtaskLastHandle%3D0%3Bvar%20microtaskCallbacks%3D%5B%5D%3Bvar%20microtaskNodeContent%3D0%3Bvar%20microtaskNode%3Ddocument.createTextNode('')%3Bnew%20window.MutationObserver(microtaskFlush).observe(microtaskNode%2C%7BcharacterData%3Atrue%7D)%3Bfunction%20microtaskFlush()%7Bvar%20len%3DmicrotaskCallbacks.length%3Bfor(var%20i%3D0%3Bi%3Clen%3Bi%2B%2B)%7Bvar%20cb%3DmicrotaskCallbacks%5Bi%5D%3Bif(cb)%7Btry%7Bcb()%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7D%7DmicrotaskCallbacks.splice(0%2Clen)%3BmicrotaskLastHandle%2B%3Dlen%3B%7D%2F**%0A%20%20%20*%20Module%20that%20provides%20a%20number%20of%20strategies%20for%20enqueuing%20asynchronous%0A%20%20%20*%20tasks.%20%20Each%20sub-module%20provides%20a%20standard%20%60run(fn)%60%20interface%20that%20returns%20a%0A%20%20%20*%20handle%2C%20and%20a%20%60cancel(handle)%60%20interface%20for%20canceling%20async%20tasks%20before%0A%20%20%20*%20they%20run.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20a%20number%20of%20strategies%20for%20enqueuing%20asynchronous%0A%20%20%20*%20tasks.%0A%20%20%20*%2FPolymer.Async%3D%7B%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60setTimeout%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60setTimeout%60.%0A%20%20%20%20%20*%2FtimeOut%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20sub-module%20with%20the%20async%20interface%20providing%20the%20provided%0A%20%20%20%20%20%20%20*%20delay.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Time%20to%20wait%20before%20calling%20callbacks%20in%20ms%0A%20%20%20%20%20%20%20*%20%40return%20%7B!AsyncInterface%7D%20An%20async%20timeout%20interface%0A%20%20%20%20%20%20%20*%2Fafter%3Afunction%20after(delay)%7Breturn%7Brun%3Afunction%20run(fn)%7Breturn%20window.setTimeout(fn%2Cdelay)%3B%7D%2Ccancel%3Afunction%20cancel(handle)%7Bwindow.clearTimeout(handle)%3B%7D%7D%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20in%20the%20next%20task.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Delay%20in%20milliseconds%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn%2Cdelay)%7Breturn%20window.setTimeout(fn%2Cdelay)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60timeOut%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.clearTimeout(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%2FanimationFrame%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20%60requestAnimationFrame%60%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.animationFrame%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(number)%3Avoid%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn)%7Breturn%20window.requestAnimationFrame(fn)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60animationFrame%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.animationFrame%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.cancelAnimationFrame(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60requestIdleCallback%60.%20%20Falls%20back%20to%0A%20%20%20%20%20*%20%60setTimeout%60%20on%20browsers%20that%20do%20not%20support%20%60requestIdleCallback%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60requestIdleCallback%60.%0A%20%20%20%20%20*%2FidlePeriod%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20%60requestIdleCallback%60%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.idlePeriod%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!IdleDeadline)%3Avoid%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn)%7Breturn%20window.requestIdleCallback%3Fwindow.requestIdleCallback(fn)%3Awindow.setTimeout(fn%2C16)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60idlePeriod%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.idlePeriod%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.cancelIdleCallback%3Fwindow.cancelIdleCallback(handle)%3Awindow.clearTimeout(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20for%20enqueuing%20callbacks%20that%20run%20at%20microtask%20timing.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20microtask%20timing%20is%20achieved%20via%20a%20single%20%60MutationObserver%60%2C%0A%20%20%20%20%20*%20and%20thus%20callbacks%20enqueued%20with%20this%20API%20will%20all%20run%20in%20a%20single%0A%20%20%20%20%20*%20batch%2C%20and%20not%20interleaved%20with%20other%20microtasks%20such%20as%20promises.%0A%20%20%20%20%20*%20Promises%20are%20avoided%20as%20an%20implementation%20choice%20for%20the%20time%20being%0A%20%20%20%20%20*%20due%20to%20Safari%20bugs%20that%20cause%20Promises%20to%20lack%20microtask%20guarantees.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20for%20enqueuing%20callbacks%20that%20run%20at%20microtask%0A%20%20%20%20%20*%20%20%20timing.%0A%20%20%20%20%20*%2FmicroTask%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20microtask%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.microTask%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%3D%7D%20callback%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(callback)%7BmicrotaskNode.textContent%3DmicrotaskNodeContent%2B%2B%3BmicrotaskCallbacks.push(callback)%3Breturn%20microtaskCurrHandle%2B%2B%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60microTask%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.microTask%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bvar%20idx%3Dhandle-microtaskLastHandle%3Bif(idx%3E%3D0)%7Bif(!microtaskCallbacks%5Bidx%5D)%7Bthrow%20new%20Error('invalid%20async%20handle%3A%20'%2Bhandle)%3B%7DmicrotaskCallbacks%5Bidx%5D%3Dnull%3B%7D%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fasync.html.js%0A",
            "resourceBytes": 5682,
            "encodedBytes": 0,
            "unusedBytes": 1151
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7B!AsyncInterface%7D%20*%2Fvar%20microtask%3DPolymer.Async.microTask%3B%2F**%0A%20%20%20%20%20*%20Element%20class%20mixin%20that%20provides%20basic%20meta-programming%20for%20creating%20one%0A%20%20%20%20%20*%20or%20more%20property%20accessors%20(getter%2Fsetter%20pair)%20that%20enqueue%20an%20async%0A%20%20%20%20%20*%20(batched)%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20For%20basic%20usage%20of%20this%20mixin%2C%20call%20%60MyClass.createProperties(props)%60%0A%20%20%20%20%20*%20once%20at%20class%20definition%20time%20to%20create%20property%20accessors%20for%20properties%0A%20%20%20%20%20*%20named%20in%20props%2C%20implement%20%60_propertiesChanged%60%20to%20react%20as%20desired%20to%0A%20%20%20%20%20*%20property%20changes%2C%20and%20implement%20%60static%20get%20observedAttributes()%60%20and%0A%20%20%20%20%20*%20include%20lowercase%20versions%20of%20any%20property%20names%20that%20should%20be%20set%20from%0A%20%20%20%20%20*%20attributes.%20Last%2C%20call%20%60this._enableProperties()%60%20in%20the%20element's%0A%20%20%20%20%20*%20%60connectedCallback%60%20to%20enable%20the%20accessors.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40mixinFunction%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Element%20class%20mixin%20for%20reacting%20to%20property%20changes%20from%0A%20%20%20%20%20*%20%20%20generated%20property%20accessors.%0A%20%20%20%20%20*%2FPolymer.PropertiesChanged%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20%20%20*%2Fvar%20PropertiesChanged%3Dfunction(_superClass)%7B_inherits(PropertiesChanged%2C_superClass)%3B_createClass(PropertiesChanged%2C%5B%7Bkey%3A'_createPropertyAccessor'%2C%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20Creates%20a%20setter%2Fgetter%20pair%20for%20the%20named%20property%20with%20its%20own%0A%20%20%20%20%20%20%20%20%20*%20local%20storage.%20%20The%20getter%20returns%20the%20value%20in%20the%20local%20storage%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20the%20setter%20calls%20%60_setProperty%60%2C%20which%20updates%20the%20local%20storage%0A%20%20%20%20%20%20%20%20%20*%20for%20the%20property%20and%20enqueues%20a%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20a%20prototype%20or%20an%20instance.%20%20Calling%0A%20%20%20%20%20%20%20%20%20*%20this%20method%20may%20overwrite%20a%20property%20value%20that%20already%20exists%20on%0A%20%20%20%20%20%20%20%20%20*%20the%20prototype%2Finstance%20by%20creating%20the%20accessor.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%3B%20the%0A%20%20%20%20%20%20%20%20%20*%20%20%20protected%20%60_setProperty%60%20function%20must%20be%20used%20to%20set%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_createPropertyAccessor(property%2CreadOnly)%7Bthis._addPropertyToAttributeMap(property)%3Bif(!this.hasOwnProperty('__dataHasAccessor'))%7Bthis.__dataHasAccessor%3DObject.assign(%7B%7D%2Cthis.__dataHasAccessor)%3B%7Dif(!this.__dataHasAccessor%5Bproperty%5D)%7Bthis.__dataHasAccessor%5Bproperty%5D%3Dtrue%3Bthis._definePropertyAccessor(property%2CreadOnly)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Adds%20the%20given%20%60property%60%20to%20a%20map%20matching%20attribute%20names%0A%20%20%20%20%20%20%20%20%20*%20to%20property%20names%2C%20using%20%60attributeNameForProperty%60.%20This%20map%20is%0A%20%20%20%20%20%20%20%20%20*%20used%20when%20deserializing%20attribute%20values%20to%20properties.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyToAttributeMap'%2Cvalue%3Afunction%20_addPropertyToAttributeMap(property)%7Bif(!this.hasOwnProperty('__dataAttributes'))%7Bthis.__dataAttributes%3DObject.assign(%7B%7D%2Cthis.__dataAttributes)%3B%7Dif(!this.__dataAttributes%5Bproperty%5D)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bthis.__dataAttributes%5Battr%5D%3Dproperty%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Defines%20a%20property%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_definePropertyAccessor'%2Cvalue%3Afunction%20_definePropertyAccessor(property%2CreadOnly)%7BObject.defineProperty(this%2Cproperty%2C%7B%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%20%40this%20%7BPropertiesChanged%7D%20*%2Fget%3Afunction%20get()%7Breturn%20this._getProperty(property)%3B%7D%2C%2F**%20%40this%20%7BPropertiesChanged%7D%20*%2Fset%3AreadOnly%3Ffunction()%7B%7D%3Afunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%2F*%20eslint-enable%20*%2F%7D)%3B%7D%7D%5D%2C%5B%7Bkey%3A'createProperties'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Creates%20property%20accessors%20for%20the%20given%20property%20names.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20props%20Object%20whose%20keys%20are%20names%20of%20accessors.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20createProperties(props)%7Bvar%20proto%3Dthis.prototype%3Bfor(var%20prop%20in%20props)%7B%2F%2F%20don't%20stomp%20an%20existing%20accessor%0Aif(!(prop%20in%20proto))%7Bproto._createPropertyAccessor(prop)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Returns%20an%20attribute%20name%20that%20corresponds%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20The%20attribute%20name%20is%20the%20lowercased%20property%20name.%20Override%20to%0A%20%20%20%20%20%20%20%20%20*%20customize%20this%20mapping.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20to%20convert%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Attribute%20name%20corresponding%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeNameForProperty'%2Cvalue%3Afunction%20attributeNameForProperty(property)%7Breturn%20property.toLowerCase()%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Override%20point%20to%20provide%20a%20type%20to%20which%20to%20deserialize%20a%20value%20to%0A%20%20%20%20%20%20%20%20%20*%20a%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20property%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'typeForProperty'%2Cvalue%3Afunction%20typeForProperty(name)%7B%7D%7D%5D)%3Bfunction%20PropertiesChanged()%7B_classCallCheck(this%2CPropertiesChanged)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(PropertiesChanged.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged)).call(this))%3B_this.__dataEnabled%3Dfalse%3B_this.__dataReady%3Dfalse%3B_this.__dataInvalid%3Dfalse%3B_this.__data%3D%7B%7D%3B_this.__dataPending%3Dnull%3B_this.__dataOld%3Dnull%3B_this.__dataInstanceProps%3Dnull%3B_this.__serializing%3Dfalse%3B_this._initializeProperties()%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Lifecycle%20callback%20called%20when%20properties%20are%20enabled%20via%0A%20%20%20%20%20%20%20%20%20*%20%60_enableProperties%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20function%20to%20implement%20behavior%20that%20is%0A%20%20%20%20%20%20%20%20%20*%20dependent%20on%20the%20element%20having%20its%20property%20data%20initialized%2C%20e.g.%0A%20%20%20%20%20%20%20%20%20*%20from%20defaults%20(initialized%20from%20%60constructor%60%2C%20%60_initializeProperties%60)%2C%0A%20%20%20%20%20%20%20%20%20*%20%60attributeChangedCallback%60%2C%20or%20values%20propagated%20from%20host%20e.g.%20via%0A%20%20%20%20%20%20%20%20%20*%20bindings.%20%20%60super.ready()%60%20must%20be%20called%20to%20ensure%20the%20data%20system%0A%20%20%20%20%20%20%20%20%20*%20becomes%20enabled.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20%20%20*%2F_createClass(PropertiesChanged%2C%5B%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bthis.__dataReady%3Dtrue%3Bthis._flushProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Initializes%20the%20local%20storage%20for%20property%20accessors.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Provided%20as%20an%20override%20point%20for%20performing%20any%20setup%20work%20prior%0A%20%20%20%20%20%20%20%20%20*%20to%20initializing%20the%20property%20accessor%20system.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7B%2F%2F%20Capture%20instance%20properties%3B%20these%20will%20be%20set%20into%20accessors%0A%2F%2F%20during%20first%20flush.%20Don't%20set%20them%20here%2C%20since%20we%20want%0A%2F%2F%20these%20to%20overwrite%20defaults%2Fconstructor%20assignments%0Afor(var%20p%20in%20this.__dataHasAccessor)%7Bif(this.hasOwnProperty(p))%7Bthis.__dataInstanceProps%3Dthis.__dataInstanceProps%7C%7C%7B%7D%3Bthis.__dataInstanceProps%5Bp%5D%3Dthis%5Bp%5D%3Bdelete%20this%5Bp%5D%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Called%20at%20ready%20time%20with%20bag%20of%20instance%20properties%20that%20overwrote%0A%20%20%20%20%20%20%20%20%20*%20accessors%20when%20the%20element%20upgraded.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20The%20default%20implementation%20sets%20these%20properties%20back%20into%20the%0A%20%20%20%20%20%20%20%20%20*%20setter%20at%20ready%20time.%20%20This%20method%20is%20provided%20as%20an%20override%0A%20%20%20%20%20%20%20%20%20*%20point%20for%20customizing%20or%20providing%20more%20efficient%20initialization.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20property%20values%20that%20were%20overwritten%0A%20%20%20%20%20%20%20%20%20*%20%20%20when%20creating%20property%20accessors.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7BObject.assign(this%2Cprops)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Updates%20the%20local%20storage%20for%20a%20property%20(via%20%60_setPendingProperty%60)%0A%20%20%20%20%20%20%20%20%20*%20and%20enqueues%20a%20%60_proeprtiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Returns%20the%20value%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20for%20the%20given%20property%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_getProperty'%2Cvalue%3Afunction%20_getProperty(property)%7Breturn%20this.__data%5Bproperty%5D%3B%7D%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20Updates%20the%20local%20storage%20for%20a%20property%2C%20records%20the%20previous%20value%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20adds%20it%20to%20the%20set%20of%20%22pending%20changes%22%20that%20will%20be%20passed%20to%20the%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%20%20This%20method%20does%20not%20enqueue%20the%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20ext%20Not%20used%20here%3B%20affordance%20for%20closure%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2Cext)%7Bvar%20old%3Dthis.__data%5Bproperty%5D%3Bvar%20changed%3Dthis._shouldPropertyChange(property%2Cvalue%2Cold)%3Bif(changed)%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(this.__dataOld%26%26!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dold%3B%7Dthis.__data%5Bproperty%5D%3Dvalue%3Bthis.__dataPending%5Bproperty%5D%3Dvalue%3B%7Dreturn%20changed%3B%7D%2F*%20eslint-enable%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20Marks%20the%20properties%20as%20invalid%2C%20and%20enqueues%20an%20async%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bvar%20_this2%3Dthis%3Bif(!this.__dataInvalid%26%26this.__dataReady)%7Bthis.__dataInvalid%3Dtrue%3Bmicrotask.run(function()%7Bif(_this2.__dataInvalid)%7B_this2.__dataInvalid%3Dfalse%3B_this2._flushProperties()%3B%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Call%20to%20enable%20property%20accessor%20processing.%20Before%20this%20method%20is%0A%20%20%20%20%20%20%20%20%20*%20called%20accessor%20values%20will%20be%20set%20but%20side%20effects%20are%0A%20%20%20%20%20%20%20%20%20*%20queued.%20When%20called%2C%20any%20pending%20side%20effects%20occur%20immediately.%0A%20%20%20%20%20%20%20%20%20*%20For%20elements%2C%20generally%20%60connectedCallback%60%20is%20a%20normal%20spot%20to%20do%20so.%0A%20%20%20%20%20%20%20%20%20*%20It%20is%20safe%20to%20call%20this%20method%20multiple%20times%20as%20it%20only%20turns%20on%0A%20%20%20%20%20%20%20%20%20*%20property%20accessors%20once.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enableProperties'%2Cvalue%3Afunction%20_enableProperties()%7Bif(!this.__dataEnabled)%7Bthis.__dataEnabled%3Dtrue%3Bif(this.__dataInstanceProps)%7Bthis._initializeInstanceProperties(this.__dataInstanceProps)%3Bthis.__dataInstanceProps%3Dnull%3B%7Dthis.ready()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Calls%20the%20%60_propertiesChanged%60%20callback%20with%20the%20current%20set%20of%0A%20%20%20%20%20%20%20%20%20*%20pending%20changes%20(and%20old%20values%20recorded%20when%20pending%20changes%20were%0A%20%20%20%20%20%20%20%20%20*%20set)%2C%20and%20resets%20the%20pending%20set%20of%20changes.%20Generally%2C%20this%20method%0A%20%20%20%20%20%20%20%20%20*%20should%20not%20be%20called%20in%20user%20code.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bvar%20props%3Dthis.__data%3Bvar%20changedProps%3Dthis.__dataPending%3Bvar%20old%3Dthis.__dataOld%3Bif(this._shouldPropertiesChange(props%2CchangedProps%2Cold))%7Bthis.__dataPending%3Dnull%3Bthis.__dataOld%3Dnull%3Bthis._propertiesChanged(props%2CchangedProps%2Cold)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Called%20in%20%60_flushProperties%60%20to%20determine%20if%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20should%20be%20called.%20The%20default%20implementation%20returns%20true%20if%0A%20%20%20%20%20%20%20%20%20*%20properties%20are%20pending.%20Override%20to%20customize%20when%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20is%20called.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20changedProps%20is%20truthy%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_shouldPropertiesChange'%2Cvalue%3Afunction%20_shouldPropertiesChange(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Areturn%20Boolean(changedProps)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Callback%20called%20when%20any%20properties%20with%20accessors%20created%20via%0A%20%20%20%20%20%20%20%20%20*%20%60_createPropertyAccessor%60%20have%20been%20set.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20Method%20called%20to%20determine%20whether%20a%20property%20value%20should%20be%0A%20%20%20%20%20%20%20%20%20*%20considered%20as%20a%20change%20and%20cause%20the%20%60_propertiesChanged%60%20callback%0A%20%20%20%20%20%20%20%20%20*%20to%20be%20enqueued.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20The%20default%20implementation%20returns%20%60true%60%20if%20a%20strict%20equality%0A%20%20%20%20%20%20%20%20%20*%20check%20fails.%20The%20method%20always%20returns%20false%20for%20%60NaN%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Override%20this%20method%20to%20e.g.%20provide%20stricter%20checking%20for%0A%20%20%20%20%20%20%20%20%20*%20Objects%2FArrays%20when%20using%20immutable%20patterns.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20%20%20*%20%20%20and%20enqueue%20a%20%60_proeprtiesChanged%60%20callback%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_shouldPropertyChange'%2Cvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn(%2F%2F%20Strict%20equality%20check%0Aold!%3D%3Dvalue%26%26(%2F%2F%20This%20ensures%20(old%3D%3DNaN%2C%20value%3D%3DNaN)%20always%20returns%20false%0Aold%3D%3D%3Dold%7C%7Cvalue%3D%3D%3Dvalue))%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Implements%20native%20Custom%20Elements%20%60attributeChangedCallback%60%20to%0A%20%20%20%20%20%20%20%20%20*%20set%20an%20attribute%20value%20to%20a%20property%20via%20%60_attributeToProperty%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute%20that%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20New%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7Bthis._attributeToProperty(name%2Cvalue)%3B%7Dif(_get(PropertiesChanged.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged.prototype)%2C'attributeChangedCallback'%2Cthis))%7B_get(PropertiesChanged.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged.prototype)%2C'attributeChangedCallback'%2Cthis).call(this%2Cname%2Cold%2Cvalue%2Cnamespace)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Deserializes%20an%20attribute%20to%20its%20associated%20property.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20calls%20the%20%60_deserializeValue%60%20method%20to%20convert%20the%20string%20to%0A%20%20%20%20%20%20%20%20%20*%20a%20typed%20value.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Name%20of%20attribute%20to%20deserialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20of%20the%20attribute.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20type%20to%20deserialize%20to%2C%20defaults%20to%20the%20value%0A%20%20%20%20%20%20%20%20%20*%20returned%20from%20%60typeForProperty%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_attributeToProperty'%2Cvalue%3Afunction%20_attributeToProperty(attribute%2Cvalue%2Ctype)%7Bif(!this.__serializing)%7Bvar%20map%3Dthis.__dataAttributes%3Bvar%20property%3Dmap%26%26map%5Battribute%5D%7C%7Cattribute%3Bthis%5Bproperty%5D%3Dthis._deserializeValue(value%2Ctype%7C%7Cthis.constructor.typeForProperty(property))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Serializes%20a%20property%20to%20its%20associated%20attribute.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20can't%20figure%20out%20%60this%60%20is%20an%20element.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%20to%20reflect.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20attribute%20Attribute%20name%20to%20reflect%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Property%20value%20to%20refect.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertyToAttribute'%2Cvalue%3Afunction%20_propertyToAttribute(property%2Cattribute%2Cvalue)%7Bthis.__serializing%3Dtrue%3Bvalue%3Darguments.length%3C3%3Fthis%5Bproperty%5D%3Avalue%3Bthis._valueToNodeAttribute(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%2Cvalue%2Cattribute%7C%7Cthis.constructor.attributeNameForProperty(property))%3Bthis.__serializing%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Sets%20a%20typed%20value%20to%20an%20HTML%20attribute%20on%20a%20node.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20calls%20the%20%60_serializeValue%60%20method%20to%20convert%20the%20typed%0A%20%20%20%20%20%20%20%20%20*%20value%20to%20a%20string.%20%20If%20the%20%60_serializeValue%60%20method%20returns%20%60undefined%60%2C%0A%20%20%20%20%20%20%20%20%20*%20the%20attribute%20will%20be%20removed%20(this%20is%20the%20default%20for%20boolean%0A%20%20%20%20%20%20%20%20%20*%20type%20%60false%60).%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20set%20attribute%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20serialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Attribute%20name%20to%20serialize%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_valueToNodeAttribute'%2Cvalue%3Afunction%20_valueToNodeAttribute(node%2Cvalue%2Cattribute)%7Bvar%20str%3Dthis._serializeValue(value)%3Bif(str%3D%3D%3Dundefined)%7Bnode.removeAttribute(attribute)%3B%7Delse%7Bnode.setAttribute(attribute%2Cstr)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Converts%20a%20typed%20JavaScript%20value%20to%20a%20string.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20is%20called%20when%20setting%20JS%20property%20values%20to%0A%20%20%20%20%20%20%20%20%20*%20HTML%20attributes.%20%20Users%20may%20override%20this%20method%20to%20provide%0A%20%20%20%20%20%20%20%20%20*%20serialization%20for%20custom%20types.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Property%20value%20to%20serialize.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20String%20serialized%20from%20the%20provided%0A%20%20%20%20%20%20%20%20%20*%20property%20%20value.%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_serializeValue'%2Cvalue%3Afunction%20_serializeValue(value)%7Bswitch(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%7Bcase'boolean'%3Areturn%20value%3F''%3Aundefined%3Bdefault%3Areturn%20value!%3Dnull%3Fvalue.toString()%3Aundefined%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20is%20called%20when%20reading%20HTML%20attribute%20values%20to%0A%20%20%20%20%20%20%20%20%20*%20JS%20properties.%20%20Users%20may%20override%20this%20method%20to%20provide%0A%20%20%20%20%20%20%20%20%20*%20deserialization%20for%20custom%20%60type%60s.%20Types%20for%20%60Boolean%60%2C%20%60String%60%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20%60Number%60%20convert%20attributes%20to%20the%20expected%20types.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Value%20to%20deserialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20Type%20to%20deserialize%20the%20string%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Typed%20value%20deserialized%20from%20the%20provided%20string.%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_deserializeValue'%2Cvalue%3Afunction%20_deserializeValue(value%2Ctype)%7Bswitch(type)%7Bcase%20Boolean%3Areturn%20value!%3D%3Dnull%3Bcase%20Number%3Areturn%20Number(value)%3Bdefault%3Areturn%20value%3B%7D%7D%7D%5D)%3Breturn%20PropertiesChanged%3B%7D(superClass)%3Breturn%20PropertiesChanged%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperties-changed.html.js%0A",
            "resourceBytes": 20501,
            "encodedBytes": 0,
            "unusedBytes": 7197
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20caseMap%3DPolymer.CaseMap%3B%2F%2F%20Save%20map%20of%20native%20properties%3B%20this%20forms%20a%20blacklist%20or%20properties%0A%2F%2F%20that%20won't%20have%20their%20values%20%22saved%22%20by%20%60saveAccessorValue%60%2C%20since%0A%2F%2F%20reading%20from%20an%20HTMLElement%20accessor%20from%20the%20context%20of%20a%20prototype%20throws%0Avar%20nativeProperties%3D%7B%7D%3Bvar%20proto%3DHTMLElement.prototype%3Bwhile(proto)%7Bvar%20props%3DObject.getOwnPropertyNames(proto)%3Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7BnativeProperties%5Bprops%5Bi%5D%5D%3Dtrue%3B%7Dproto%3DObject.getPrototypeOf(proto)%3B%7D%2F**%0A%20%20%20*%20Used%20to%20save%20the%20value%20of%20a%20property%20that%20will%20be%20overridden%20with%0A%20%20%20*%20an%20accessor.%20If%20the%20%60model%60%20is%20a%20prototype%2C%20the%20values%20will%20be%20saved%0A%20%20%20*%20in%20%60__dataProto%60%2C%20and%20it's%20up%20to%20the%20user%20(or%20downstream%20mixin)%20to%0A%20%20%20*%20decide%20how%2Fwhen%20to%20set%20these%20values%20back%20into%20the%20accessors.%0A%20%20%20*%20If%20%60model%60%20is%20already%20an%20instance%20(it%20has%20a%20%60__data%60%20property)%2C%20then%0A%20%20%20*%20the%20value%20will%20be%20set%20as%20a%20pending%20property%2C%20meaning%20the%20user%20should%0A%20%20%20*%20call%20%60_invalidateProperties%60%20or%20%60_flushProperties%60%20to%20take%20effect%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20saveAccessorValue(model%2Cproperty)%7B%2F%2F%20Don't%20read%2Fstore%20value%20for%20any%20native%20properties%20since%20they%20could%20throw%0Aif(!nativeProperties%5Bproperty%5D)%7Bvar%20value%3Dmodel%5Bproperty%5D%3Bif(value!%3D%3Dundefined)%7Bif(model.__data)%7B%2F%2F%20Adding%20accessor%20to%20instance%3B%20update%20the%20property%0A%2F%2F%20It%20is%20the%20user's%20responsibility%20to%20call%20_flushProperties%0Amodel._setPendingProperty(property%2Cvalue)%3B%7Delse%7B%2F%2F%20Adding%20accessor%20to%20proto%3B%20save%20proto's%20value%20for%20instance-time%20use%0Aif(!model.__dataProto)%7Bmodel.__dataProto%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(JSCompiler_renameProperty('__dataProto'%2Cmodel)))%7Bmodel.__dataProto%3DObject.create(model.__dataProto)%3B%7Dmodel.__dataProto%5Bproperty%5D%3Dvalue%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20basic%20meta-programming%20for%20creating%20one%0A%20%20%20*%20or%20more%20property%20accessors%20(getter%2Fsetter%20pair)%20that%20enqueue%20an%20async%0A%20%20%20*%20(batched)%20%60_propertiesChanged%60%20callback.%0A%20%20%20*%0A%20%20%20*%20For%20basic%20usage%20of%20this%20mixin%3A%0A%20%20%20*%20%0A%20%20%20*%20-%20%20%20Declare%20attributes%20to%20observe%20via%20the%20standard%20%60static%20get%20observedAttributes()%60.%20Use%0A%20%20%20*%20%20%20%20%20%60dash-case%60%20attribute%20names%20to%20represent%20%60camelCase%60%20property%20names.%20%0A%20%20%20*%20-%20%20%20Implement%20the%20%60_propertiesChanged%60%20callback%20on%20the%20class.%0A%20%20%20*%20-%20%20%20Call%20%60MyClass.createPropertiesForAttributes()%60%20**once**%20on%20the%20class%20to%20generate%20%0A%20%20%20*%20%20%20%20%20property%20accessors%20for%20each%20observed%20attribute.%20This%20must%20be%20called%20before%20the%20first%20%0A%20%20%20*%20%20%20%20%20instance%20is%20created%2C%20for%20example%2C%20by%20calling%20it%20before%20calling%20%60customElements.define%60.%0A%20%20%20*%20%20%20%20%20It%20can%20also%20be%20called%20lazily%20from%20the%20element's%20%60constructor%60%2C%20as%20long%20as%20it's%20guarded%20so%0A%20%20%20*%20%20%20%20%20that%20the%20call%20is%20only%20made%20once%2C%20when%20the%20first%20instance%20is%20created.%0A%20%20%20*%20-%20%20%20Call%20%60this._enableProperties()%60%20in%20the%20element's%20%60connectedCallback%60%20to%20enable%20%0A%20%20%20*%20%20%20%20%20the%20accessors.%0A%20%20%20*%0A%20%20%20*%20Any%20%60observedAttributes%60%20will%20automatically%20be%0A%20%20%20*%20deserialized%20via%20%60attributeChangedCallback%60%20and%20set%20to%20the%20associated%0A%20%20%20*%20property%20using%20%60dash-case%60-to-%60camelCase%60%20convention.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesChanged%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20for%20reacting%20to%20property%20changes%20from%0A%20%20%20*%20%20%20generated%20property%20accessors.%0A%20%20%20*%2FPolymer.PropertyAccessors%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertiesChanged(superClass)%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyAccessors%3Dfunction(_base)%7B_inherits(PropertyAccessors%2C_base)%3Bfunction%20PropertyAccessors()%7B_classCallCheck(this%2CPropertyAccessors)%3Breturn%20_possibleConstructorReturn(this%2C(PropertyAccessors.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors)).apply(this%2Carguments))%3B%7D_createClass(PropertyAccessors%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implementation%20to%20initialize%20values%20for%0A%20%20%20%20%20%20%20*%20accessors%20created%20for%20values%20that%20already%20existed%20on%20the%20element%0A%20%20%20%20%20%20%20*%20prototype.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7Bif(this.__dataProto)%7Bthis._initializeProtoProperties(this.__dataProto)%3Bthis.__dataProto%3Dnull%3B%7D_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20at%20instance%20time%20with%20bag%20of%20properties%20that%20were%20overwritten%0A%20%20%20%20%20%20%20*%20by%20accessors%20on%20the%20prototype%20when%20accessors%20were%20created.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20sets%20these%20properties%20back%20into%20the%0A%20%20%20%20%20%20%20*%20setter%20at%20instance%20time.%20%20This%20method%20is%20provided%20as%20an%20override%0A%20%20%20%20%20%20%20*%20point%20for%20customizing%20or%20providing%20more%20efficient%20initialization.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20property%20values%20that%20were%20overwritten%0A%20%20%20%20%20%20%20*%20%20%20when%20creating%20property%20accessors.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bfor(var%20p%20in%20props)%7Bthis._setProperty(p%2Cprops%5Bp%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20the%20element%20has%20the%20given%20attribute.%20If%20it%20does%20not%2C%0A%20%20%20%20%20%20%20*%20assigns%20the%20given%20value%20to%20the%20attribute.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20can't%20figure%20out%20%60this%60%20is%20infact%20an%20element%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Name%20of%20attribute%20to%20ensure%20is%20set.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20of%20the%20attribute.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttribute'%2Cvalue%3Afunction%20_ensureAttribute(attribute%2Cvalue)%7Bvar%20el%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%3Bif(!el.hasAttribute(attribute))%7Bthis._valueToNodeAttribute(el%2Cvalue%2Cattribute)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implemention%20to%20serialize%20objects%20as%20JSON.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Property%20value%20to%20serialize.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20String%20serialized%20from%20the%20provided%20property%20value.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_serializeValue'%2Cvalue%3Afunction%20_serializeValue(value)%7B%2F*%20eslint-disable%20no-fallthrough%20*%2Fswitch(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%7Bcase'object'%3Aif(value%20instanceof%20Date)%7Breturn%20value.toString()%3B%7Delse%20if(value)%7Btry%7Breturn%20JSON.stringify(value)%3B%7Dcatch(x)%7Breturn''%3B%7D%7Ddefault%3Areturn%20_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_serializeValue'%2Cthis).call(this%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20is%20called%20by%20Polymer%20when%20reading%20HTML%20attribute%20values%20to%0A%20%20%20%20%20%20%20*%20JS%20properties.%20%20Users%20may%20override%20this%20method%20on%20Polymer%20element%0A%20%20%20%20%20%20%20*%20prototypes%20to%20provide%20deserialization%20for%20custom%20%60type%60s.%20%20Note%2C%0A%20%20%20%20%20%20%20*%20the%20%60type%60%20argument%20is%20the%20value%20of%20the%20%60type%60%20field%20provided%20in%20the%0A%20%20%20%20%20%20%20*%20%60properties%60%20configuration%20object%20for%20a%20given%20property%2C%20and%20is%0A%20%20%20%20%20%20%20*%20by%20convention%20the%20constructor%20for%20the%20type%20to%20deserialize.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Attribute%20value%20to%20deserialize.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20Type%20to%20deserialize%20the%20string%20to.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Typed%20value%20deserialized%20from%20the%20provided%20string.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_deserializeValue'%2Cvalue%3Afunction%20_deserializeValue(value%2Ctype)%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40type%20%7B*%7D%0A%20%20%20%20%20%20%20%20%20*%2Fvar%20outValue%3Dvoid%200%3Bswitch(type)%7Bcase%20Object%3Atry%7BoutValue%3DJSON.parse(%2F**%20%40type%20%7Bstring%7D%20*%2Fvalue)%3B%7Dcatch(x)%7B%2F%2F%20allow%20non-JSON%20literals%20like%20Strings%20and%20Numbers%0AoutValue%3Dvalue%3B%7Dbreak%3Bcase%20Array%3Atry%7BoutValue%3DJSON.parse(%2F**%20%40type%20%7Bstring%7D%20*%2Fvalue)%3B%7Dcatch(x)%7BoutValue%3Dnull%3Bconsole.warn('Polymer%3A%3AAttributes%3A%20couldn%5C't%20decode%20Array%20as%20JSON%3A%20'%2Bvalue)%3B%7Dbreak%3Bcase%20Date%3AoutValue%3DisNaN(value)%3FString(value)%3ANumber(value)%3BoutValue%3Dnew%20Date(outValue)%3Bbreak%3Bdefault%3AoutValue%3D_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_deserializeValue'%2Cthis).call(this%2Cvalue%2Ctype)%3Bbreak%3B%7Dreturn%20outValue%3B%7D%2F*%20eslint-enable%20no-fallthrough%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implementation%20to%20save%20existing%20prototype%0A%20%20%20%20%20%20%20*%20property%20value%20so%20that%20it%20can%20be%20reset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20calling%20on%20a%20prototype%2C%20any%20overwritten%20values%20are%20saved%20in%0A%20%20%20%20%20%20%20*%20%60__dataProto%60%2C%20and%20it%20is%20up%20to%20the%20subclasser%20to%20decide%20how%2Fwhen%0A%20%20%20%20%20%20%20*%20to%20set%20those%20properties%20back%20into%20the%20accessor.%20%20When%20calling%20on%20an%0A%20%20%20%20%20%20%20*%20instance%2C%20the%20overwritten%20value%20is%20set%20via%20%60_setPendingProperty%60%2C%0A%20%20%20%20%20%20%20*%20and%20the%20user%20should%20call%20%60_invalidateProperties%60%20or%20%60_flushProperties%60%0A%20%20%20%20%20%20%20*%20for%20the%20values%20to%20take%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_definePropertyAccessor'%2Cvalue%3Afunction%20_definePropertyAccessor(property%2CreadOnly)%7BsaveAccessorValue(this%2Cproperty)%3B_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_definePropertyAccessor'%2Cthis).call(this%2Cproperty%2CreadOnly)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20true%20if%20this%20library%20created%20an%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20accessor%20was%20created%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasAccessor'%2Cvalue%3Afunction%20_hasAccessor(property)%7Breturn%20this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bproperty%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20true%20if%20the%20specified%20property%20has%20a%20pending%20change.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20property%20has%20a%20pending%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_isPropertyPending'%2Cvalue%3Afunction%20_isPropertyPending(prop)%7Breturn%20Boolean(this.__dataPending%26%26prop%20in%20this.__dataPending)%3B%7D%7D%5D%2C%5B%7Bkey%3A'createPropertiesForAttributes'%2C%2F**%0A%20%20%20%20%20%20%20*%20Generates%20property%20accessors%20for%20all%20attributes%20in%20the%20standard%0A%20%20%20%20%20%20%20*%20static%20%60observedAttributes%60%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Attribute%20names%20are%20mapped%20to%20property%20names%20using%20the%20%60dash-case%60%20to%0A%20%20%20%20%20%20%20*%20%60camelCase%60%20convention%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20createPropertiesForAttributes()%7Bvar%20a%24%3Dthis.observedAttributes%3Bfor(var%20_i%3D0%3B_i%3Ca%24.length%3B_i%2B%2B)%7Bthis.prototype._createPropertyAccessor(caseMap.dashToCamelCase(a%24%5B_i%5D))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20an%20attribute%20name%20that%20corresponds%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20By%20default%2C%20converts%20camel%20to%20dash%20case%2C%20e.g.%20%60fooBar%60%20to%20%60foo-bar%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20to%20convert%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Attribute%20name%20corresponding%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeNameForProperty'%2Cvalue%3Afunction%20attributeNameForProperty(property)%7Breturn%20caseMap.camelToDashCase(property)%3B%7D%7D%5D)%3Breturn%20PropertyAccessors%3B%7D(base)%3Breturn%20PropertyAccessors%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-accessors.html.js%0A",
            "resourceBytes": 12872,
            "encodedBytes": 0,
            "unusedBytes": 4982
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20walker%3Ddocument.createTreeWalker(document%2CNodeFilter.SHOW_ALL%2Cnull%2Cfalse)%3B%2F%2F%201.x%20backwards-compatible%20auto-wrapper%20for%20template%20type%20extensions%0A%2F%2F%20This%20is%20a%20clear%20layering%20violation%20and%20gives%20favored-nation%20status%20to%0A%2F%2F%20dom-if%20and%20dom-repeat%20templates.%20%20This%20is%20a%20conceit%20we're%20choosing%20to%20keep%0A%2F%2F%20a.)%20to%20ease%201.x%20backwards-compatibility%20due%20to%20loss%20of%20%60is%60%2C%20and%0A%2F%2F%20b.)%20to%20maintain%20if%2Frepeat%20capability%20in%20parser-constrained%20elements%0A%2F%2F%20%20%20%20%20(e.g.%20table%2C%20select)%20in%20lieu%20of%20native%20CE%20type%20extensions%20without%0A%2F%2F%20%20%20%20%20massive%20new%20invention%20in%20this%20space%20(e.g.%20directive%20system)%0Avar%20templateExtensions%3D%7B'dom-if'%3Atrue%2C'dom-repeat'%3Atrue%7D%3Bfunction%20wrapTemplateExtension(node)%7Bvar%20is%3Dnode.getAttribute('is')%3Bif(is%26%26templateExtensions%5Bis%5D)%7Bvar%20t%3Dnode%3Bt.removeAttribute('is')%3Bnode%3Dt.ownerDocument.createElement(is)%3Bt.parentNode.replaceChild(node%2Ct)%3Bnode.appendChild(t)%3Bwhile(t.attributes.length)%7Bnode.setAttribute(t.attributes%5B0%5D.name%2Ct.attributes%5B0%5D.value)%3Bt.removeAttribute(t.attributes%5B0%5D.name)%3B%7D%7Dreturn%20node%3B%7Dfunction%20findTemplateNode(root%2CnodeInfo)%7B%2F%2F%20recursively%20ascend%20tree%20until%20we%20hit%20root%0Avar%20parent%3DnodeInfo.parentInfo%26%26findTemplateNode(root%2CnodeInfo.parentInfo)%3B%2F%2F%20unwind%20the%20stack%2C%20returning%20the%20indexed%20node%20at%20each%20level%0Aif(parent)%7B%2F%2F%20note%3A%20marginally%20faster%20than%20indexing%20via%20childNodes%0A%2F%2F%20(http%3A%2F%2Fjsperf.com%2Fchildnodes-lookup)%0Awalker.currentNode%3Dparent%3Bfor(var%20n%3Dwalker.firstChild()%2Ci%3D0%3Bn%3Bn%3Dwalker.nextSibling())%7Bif(nodeInfo.parentIndex%3D%3D%3Di%2B%2B)%7Breturn%20n%3B%7D%7D%7Delse%7Breturn%20root%3B%7D%7D%2F%2F%20construct%20%60%24%60%20map%20(from%20id%20annotations)%0Afunction%20applyIdToMap(inst%2Cmap%2Cnode%2CnodeInfo)%7Bif(nodeInfo.id)%7Bmap%5BnodeInfo.id%5D%3Dnode%3B%7D%7D%2F%2F%20install%20event%20listeners%20(from%20event%20annotations)%0Afunction%20applyEventListener(inst%2Cnode%2CnodeInfo)%7Bif(nodeInfo.events%26%26nodeInfo.events.length)%7Bfor(var%20j%3D0%2Ce%24%3DnodeInfo.events%2Ce%3Bj%3Ce%24.length%26%26(e%3De%24%5Bj%5D)%3Bj%2B%2B)%7Binst._addMethodEventListenerToNode(node%2Ce.name%2Ce.value%2Cinst)%3B%7D%7D%7D%2F%2F%20push%20configuration%20references%20at%20configure%20time%0Afunction%20applyTemplateContent(inst%2Cnode%2CnodeInfo)%7Bif(nodeInfo.templateInfo)%7Bnode._templateInfo%3DnodeInfo.templateInfo%3B%7D%7Dfunction%20createNodeEventHandler(context%2CeventName%2CmethodName)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Acontext%3Dcontext._methodHost%7C%7Ccontext%3Bvar%20handler%3Dfunction%20handler(e)%7Bif(context%5BmethodName%5D)%7Bcontext%5BmethodName%5D(e%2Ce.detail)%3B%7Delse%7Bconsole.warn('listener%20method%20%60'%2BmethodName%2B'%60%20not%20defined')%3B%7D%7D%3Breturn%20handler%3B%7D%2F**%0A%20%20%20*%20Element%20mixin%20that%20provides%20basic%20template%20parsing%20and%20stamping%2C%20including%0A%20%20%20*%20the%20following%20template-related%20features%20for%20stamped%20templates%3A%0A%20%20%20*%0A%20%20%20*%20-%20Declarative%20event%20listeners%20(%60on-eventname%3D%22listener%22%60)%0A%20%20%20*%20-%20Map%20of%20node%20id's%20to%20stamped%20node%20instances%20(%60this.%24.id%60)%0A%20%20%20*%20-%20Nested%20template%20content%20caching%2Fremoval%20and%20re-installation%20(performance%0A%20%20%20*%20%20%20optimization)%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20basic%20template%20parsing%20and%20stamping%0A%20%20%20*%2FPolymer.TemplateStamp%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%2Fvar%20TemplateStamp%3Dfunction(_superClass)%7B_inherits(TemplateStamp%2C_superClass)%3Bfunction%20TemplateStamp()%7B_classCallCheck(this%2CTemplateStamp)%3Breturn%20_possibleConstructorReturn(this%2C(TemplateStamp.__proto__%7C%7CObject.getPrototypeOf(TemplateStamp)).apply(this%2Carguments))%3B%7D_createClass(TemplateStamp%2C%5B%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Clones%20the%20provided%20template%20content%20and%20returns%20a%20document%20fragment%0A%20%20%20%20%20%20%20*%20containing%20the%20cloned%20dom.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20template%20is%20parsed%20(once%20and%20memoized)%20using%20this%20library's%0A%20%20%20%20%20%20%20*%20template%20parsing%20features%2C%20and%20provides%20the%20following%20value-added%0A%20%20%20%20%20%20%20*%20features%3A%0A%20%20%20%20%20%20%20*%20*%20Adds%20declarative%20event%20listeners%20for%20%60on-event%3D%22handler%22%60%20attributes%0A%20%20%20%20%20%20%20*%20*%20Generates%20an%20%22id%20map%22%20for%20all%20nodes%20with%20id's%20under%20%60%24%60%20on%20returned%0A%20%20%20%20%20%20%20*%20%20%20document%20fragment%0A%20%20%20%20%20%20%20*%20*%20Passes%20template%20info%20including%20%60content%60%20back%20to%20templates%20as%0A%20%20%20%20%20%20%20*%20%20%20%60_templateInfo%60%20(a%20performance%20optimization%20to%20avoid%20deep%20template%0A%20%20%20%20%20%20%20*%20%20%20cloning)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20the%20memoized%20template%20parsing%20process%20is%20destructive%20to%20the%0A%20%20%20%20%20%20%20*%20template%3A%20attributes%20for%20bindings%20and%20declarative%20event%20listeners%20are%0A%20%20%20%20%20%20%20*%20removed%20after%20being%20noted%20in%20notes%2C%20and%20any%20nested%20%60%3Ctemplate%3E.content%60%0A%20%20%20%20%20%20%20*%20is%20removed%20and%20stored%20in%20notes%20as%20well.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Polyfill%20support%3A%20bootstrap%20the%20template%20if%20it%20has%20not%20already%20been%0Aif(template%26%26!template.content%26%26window.HTMLTemplateElement%26%26HTMLTemplateElement.decorate)%7BHTMLTemplateElement.decorate(template)%3B%7Dvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20nodeInfo%3DtemplateInfo.nodeInfoList%3Bvar%20content%3DtemplateInfo.content%7C%7Ctemplate.content%3Bvar%20dom%3D%2F**%20%40type%20%7BDocumentFragment%7D%20*%2Fdocument.importNode(content%2Ctrue)%3B%2F%2F%20NOTE%3A%20ShadyDom%20optimization%20indicating%20there%20is%20an%20insertion%20point%0Adom.__noInsertionPoint%3D!templateInfo.hasInsertionPoint%3Bvar%20nodes%3Ddom.nodeList%3Dnew%20Array(nodeInfo.length)%3Bdom.%24%3D%7B%7D%3Bfor(var%20i%3D0%2Cl%3DnodeInfo.length%2Cinfo%3Bi%3Cl%26%26(info%3DnodeInfo%5Bi%5D)%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3DfindTemplateNode(dom%2Cinfo)%3BapplyIdToMap(this%2Cdom.%24%2Cnode%2Cinfo)%3BapplyTemplateContent(this%2Cnode%2Cinfo)%3BapplyEventListener(this%2Cnode%2Cinfo)%3B%7Ddom%3D%2F**%20%40type%20%7B!StampedTemplate%7D%20*%2Fdom%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20an%20event%20listener%20by%20method%20name%20for%20the%20event%20provided.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20generates%20a%20handler%20function%20that%20looks%20up%20the%20method%0A%20%20%20%20%20%20%20*%20name%20at%20handling%20time.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20listener%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20method%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20context%20Context%20the%20method%20will%20be%20called%20on%20(defaults%0A%20%20%20%20%20%20%20*%20%20%20to%20%60node%60)%0A%20%20%20%20%20%20%20*%20%40return%20%7BFunction%7D%20Generated%20handler%20function%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addMethodEventListenerToNode'%2Cvalue%3Afunction%20_addMethodEventListenerToNode(node%2CeventName%2CmethodName%2Ccontext)%7Bcontext%3Dcontext%7C%7Cnode%3Bvar%20handler%3DcreateNodeEventHandler(context%2CeventName%2CmethodName)%3Bthis._addEventListenerToNode(node%2CeventName%2Chandler)%3Breturn%20handler%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addEventListenerToNode'%2Cvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bnode.addEventListener(eventName%2Chandler)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20event%20listener%20from%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeEventListenerFromNode'%2Cvalue%3Afunction%20_removeEventListenerFromNode(node%2CeventName%2Chandler)%7Bnode.removeEventListener(eventName%2Chandler)%3B%7D%7D%5D%2C%5B%7Bkey%3A'_parseTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Scans%20a%20template%20to%20produce%20template%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Template-specific%20metadata%20are%20stored%20in%20the%20object%20returned%2C%20and%20node-%0A%20%20%20%20%20%20%20*%20specific%20metadata%20are%20stored%20in%20objects%20in%20its%20flattened%20%60nodeInfoList%60%0A%20%20%20%20%20%20%20*%20array.%20%20Only%20nodes%20in%20the%20template%20that%20were%20parsed%20as%20nodes%20of%0A%20%20%20%20%20%20%20*%20interest%20contain%20an%20object%20in%20%60nodeInfoList%60.%20%20Each%20%60nodeInfo%60%20object%0A%20%20%20%20%20%20%20*%20contains%20an%20%60index%60%20(%60childNodes%60%20index%20in%20parent)%20and%20optionally%0A%20%20%20%20%20%20%20*%20%60parent%60%2C%20which%20points%20to%20node%20info%20of%20its%20parent%20(including%20its%20index).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20template%20metadata%20object%20returned%20from%20this%20method%20has%20the%20following%0A%20%20%20%20%20%20%20*%20structure%20(many%20fields%20optional)%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60js%0A%20%20%20%20%20%20%20*%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Flattened%20list%20of%20node%20metadata%20(for%20nodes%20that%20generated%20metadata)%0A%20%20%20%20%20%20%20*%20%20%20%20%20nodeInfoList%3A%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20%60id%60%20attribute%20for%20any%20nodes%20with%20id's%20for%20generating%20%60%24%60%20map%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20id%3A%20%7Bstring%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20%60on-event%3D%22handler%22%60%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20events%3A%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%7Bstring%7D%2C%20%20%20%2F%2F%20event%20name%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%7Bstring%7D%2C%20%20%2F%2F%20handler%20method%20name%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20Notes%20when%20the%20template%20contained%20a%20%60%3Cslot%3E%60%20for%20shady%20DOM%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20optimization%20purposes%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20hasInsertionPoint%3A%20%7Bboolean%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20For%20nested%20%60%3Ctemplate%3E%60%60%20nodes%2C%20nested%20template%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20templateInfo%3A%20%7Bobject%7D%2C%20%2F%2F%20nested%20template%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20Metadata%20to%20allow%20efficient%20retrieval%20of%20instanced%20node%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20corresponding%20to%20this%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20parentInfo%3A%20%7Bnumber%7D%2C%20%20%20%2F%2F%20reference%20to%20parent%20nodeInfo%3E%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20parentIndex%3A%20%7Bnumber%7D%2C%20%20%2F%2F%20index%20in%20parent's%20%60childNodes%60%20collection%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20infoIndex%3A%20%7Bnumber%7D%2C%20%20%20%20%2F%2F%20index%20of%20this%20%60nodeInfo%60%20in%20%60templateInfo.nodeInfoList%60%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20When%20true%2C%20the%20template%20had%20the%20%60strip-whitespace%60%20attribute%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20or%20was%20nested%20in%20a%20template%20with%20that%20setting%0A%20%20%20%20%20%20%20*%20%20%20%20%20stripWhitespace%3A%20%7Bboolean%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20For%20nested%20templates%2C%20nested%20template%20content%20is%20moved%20into%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20a%20document%20fragment%20stored%20here%3B%20this%20is%20an%20optimization%20to%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20avoid%20the%20cost%20of%20nested%20template%20cloning%0A%20%20%20%20%20%20%20*%20%20%20%20%20content%3A%20%7BDocumentFragment%7D%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20kicks%20off%20a%20recursive%20treewalk%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%20%20%20%20_parseTemplate%20%3C---------------------%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20_parseTemplateContent%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20_parseTemplateNode%20%20%3C------------%7C--%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateNestedTemplate%20--%2B%20%20%7C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateChildNodes%20---------%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateNodeAttributes%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20_parseTemplateNodeAttribute%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20These%20methods%20may%20be%20overridden%20to%20add%20custom%20metadata%20about%20templates%0A%20%20%20%20%20%20%20*%20to%20either%20%60templateInfo%60%20or%20%60nodeInfo%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20this%20method%20may%20be%20destructive%20to%20the%20template%2C%20in%20that%0A%20%20%20%20%20%20%20*%20e.g.%20event%20annotations%20may%20be%20removed%20after%20being%20noted%20in%20the%0A%20%20%20%20%20%20%20*%20template%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%3D%7D%20outerTemplateInfo%20Template%20metadata%20from%20the%20outer%0A%20%20%20%20%20%20%20*%20%20%20template%2C%20for%20parsing%20nested%20templates%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Parsed%20template%20metadata%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_parseTemplate(template%2CouterTemplateInfo)%7B%2F%2F%20since%20a%20template%20may%20be%20re-used%2C%20memo-ize%20metadata%0Aif(!template._templateInfo)%7Bvar%20templateInfo%3Dtemplate._templateInfo%3D%7B%7D%3BtemplateInfo.nodeInfoList%3D%5B%5D%3BtemplateInfo.stripWhiteSpace%3DPolymer.legacyOptimizations%7C%7CouterTemplateInfo%26%26outerTemplateInfo.stripWhiteSpace%7C%7Ctemplate.hasAttribute('strip-whitespace')%3Bthis._parseTemplateContent(template%2CtemplateInfo%2C%7Bparent%3Anull%7D)%3B%7Dreturn%20template._templateInfo%3B%7D%7D%2C%7Bkey%3A'_parseTemplateContent'%2Cvalue%3Afunction%20_parseTemplateContent(template%2CtemplateInfo%2CnodeInfo)%7Breturn%20this._parseTemplateNode(template.content%2CtemplateInfo%2CnodeInfo)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20node%20and%20adds%20template%20and%20node%20metadata%20based%20on%0A%20%20%20%20%20%20%20*%20the%20current%20node%2C%20and%20its%20%60childNodes%60%20and%20%60attributes%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20overridden%20to%20add%20custom%20node%20or%20template%20specific%0A%20%20%20%20%20%20%20*%20metadata%20based%20on%20this%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3Dvoid%200%3Bvar%20element%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%3Bif(element.localName%3D%3D'template'%26%26!element.hasAttribute('preserve-content'))%7Bnoted%3Dthis._parseTemplateNestedTemplate(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Delse%20if(element.localName%3D%3D%3D'slot')%7B%2F%2F%20For%20ShadyDom%20optimization%2C%20indicating%20there%20is%20an%20insertion%20point%0AtemplateInfo.hasInsertionPoint%3Dtrue%3B%7Dwalker.currentNode%3Delement%3Bif(walker.firstChild())%7Bnoted%3Dthis._parseTemplateChildNodes(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Dif(element.hasAttributes%26%26element.hasAttributes())%7Bnoted%3Dthis._parseTemplateNodeAttributes(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20child%20nodes%20for%20the%20given%20root%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20also%20wraps%20whitelisted%20legacy%20template%20extensions%0A%20%20%20%20%20%20%20*%20(%60is%3D%22dom-if%22%60%20and%20%60is%3D%22dom-repeat%22%60)%20with%20their%20equivalent%20element%0A%20%20%20%20%20%20%20*%20wrappers%2C%20collapses%20text%20nodes%2C%20and%20strips%20whitespace%20from%20the%20template%0A%20%20%20%20%20%20%20*%20if%20the%20%60templateInfo.stripWhitespace%60%20setting%20was%20provided.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20root%20Root%20node%20whose%20%60childNodes%60%20will%20be%20parsed%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateChildNodes'%2Cvalue%3Afunction%20_parseTemplateChildNodes(root%2CtemplateInfo%2CnodeInfo)%7Bif(root.localName%3D%3D%3D'script'%7C%7Croot.localName%3D%3D%3D'style')%7Breturn%3B%7Dwalker.currentNode%3Droot%3Bfor(var%20node%3Dwalker.firstChild()%2CparentIndex%3D0%2Cnext%3Bnode%3Bnode%3Dnext)%7B%2F%2F%20Wrap%20templates%0Aif(node.localName%3D%3D'template')%7Bnode%3DwrapTemplateExtension(node)%3B%7D%2F%2F%20collapse%20adjacent%20textNodes%3A%20fixes%20an%20IE%20issue%20that%20can%20cause%0A%2F%2F%20text%20nodes%20to%20be%20inexplicably%20split%20%3D(%0A%2F%2F%20note%20that%20root.normalize()%20should%20work%20but%20does%20not%20so%20we%20do%20this%0A%2F%2F%20manually.%0Awalker.currentNode%3Dnode%3Bnext%3Dwalker.nextSibling()%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%2F**%20Node%20*%2Fn%3Dnext%3Bwhile(n%26%26n.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bnode.textContent%2B%3Dn.textContent%3Bnext%3Dwalker.nextSibling()%3Broot.removeChild(n)%3Bn%3Dnext%3B%7D%2F%2F%20optionally%20strip%20whitespace%0Aif(templateInfo.stripWhiteSpace%26%26!node.textContent.trim())%7Broot.removeChild(node)%3Bcontinue%3B%7D%7Dvar%20childInfo%3D%7BparentIndex%3AparentIndex%2CparentInfo%3AnodeInfo%7D%3Bif(this._parseTemplateNode(node%2CtemplateInfo%2CchildInfo))%7BchildInfo.infoIndex%3DtemplateInfo.nodeInfoList.push(%2F**%20%40type%20%7B!NodeInfo%7D%20*%2FchildInfo)-1%3B%7D%2F%2F%20Increment%20if%20not%20removed%0Awalker.currentNode%3Dnode%3Bif(walker.parentNode())%7BparentIndex%2B%2B%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20content%20for%20the%20given%20nested%20%60%3Ctemplate%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Nested%20template%20info%20is%20stored%20as%20%60templateInfo%60%20in%20the%20current%20node's%0A%20%20%20%20%20%20%20*%20%60nodeInfo%60.%20%60template.content%60%20is%20removed%20and%20stored%20in%20%60templateInfo%60.%0A%20%20%20%20%20%20%20*%20It%20will%20then%20be%20the%20responsibility%20of%20the%20host%20to%20set%20it%20back%20to%20the%0A%20%20%20%20%20%20%20*%20template%20and%20for%20users%20stamping%20nested%20templates%20to%20use%20the%0A%20%20%20%20%20%20%20*%20%60_contentForTemplate%60%20method%20to%20retrieve%20the%20content%20for%20this%20template%0A%20%20%20%20%20%20%20*%20(an%20optimization%20to%20avoid%20the%20cost%20of%20cloning%20nested%20template%20content).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20node%20Node%20to%20parse%20(a%20%3Ctemplate%3E)%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20outerTemplateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%20%20that%20includes%20the%20template%20%60node%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CouterTemplateInfo%2CnodeInfo)%7Bvar%20templateInfo%3Dthis._parseTemplate(node%2CouterTemplateInfo)%3Bvar%20content%3DtemplateInfo.content%3Dnode.content.ownerDocument.createDocumentFragment()%3Bcontent.appendChild(node.content)%3BnodeInfo.templateInfo%3DtemplateInfo%3Breturn%20true%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20node%20attributes%20and%20adds%20node%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20for%20nodes%20of%20interest.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttributes'%2Cvalue%3Afunction%20_parseTemplateNodeAttributes(node%2CtemplateInfo%2CnodeInfo)%7B%2F%2F%20Make%20copy%20of%20original%20attribute%20list%2C%20since%20the%20order%20may%20change%0A%2F%2F%20as%20attributes%20are%20added%20and%20removed%0Avar%20noted%3Dfalse%3Bvar%20attrs%3DArray.from(node.attributes)%3Bfor(var%20i%3Dattrs.length-1%2Ca%3Ba%3Dattrs%5Bi%5D%3Bi--)%7Bnoted%3Dthis._parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Ca.name%2Ca.value)%7C%7Cnoted%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20a%20single%20template%20node%20attribute%20and%20adds%20node%20metadata%20to%0A%20%20%20%20%20%20%20*%20%60nodeInfo%60%20for%20attributes%20of%20interest.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20implementation%20adds%20metadata%20for%20%60on-event%3D%22handler%22%60%20attributes%0A%20%20%20%20%20%20%20*%20and%20%60id%60%20attributes.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7B%2F%2F%20events%20(on-*)%0Aif(name.slice(0%2C3)%3D%3D%3D'on-')%7Bnode.removeAttribute(name)%3BnodeInfo.events%3DnodeInfo.events%7C%7C%5B%5D%3BnodeInfo.events.push(%7Bname%3Aname.slice(3)%2Cvalue%3Avalue%7D)%3Breturn%20true%3B%7D%2F%2F%20static%20id%0Aelse%20if(name%3D%3D%3D'id')%7BnodeInfo.id%3Dvalue%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20%60content%60%20document%20fragment%20for%20a%20given%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20For%20nested%20templates%2C%20Polymer%20performs%20an%20optimization%20to%20cache%20nested%0A%20%20%20%20%20%20%20*%20template%20content%20to%20avoid%20the%20cost%20of%20cloning%20deeply%20nested%20templates.%0A%20%20%20%20%20%20%20*%20This%20method%20retrieves%20the%20cached%20content%20for%20a%20given%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20Template%20to%20retrieve%20%60content%60%20for%0A%20%20%20%20%20%20%20*%20%40return%20%7BDocumentFragment%7D%20Content%20fragment%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_contentForTemplate'%2Cvalue%3Afunction%20_contentForTemplate(template)%7Bvar%20templateInfo%3D%2F**%20%40type%20%7BHTMLTemplateElementWithInfo%7D%20*%2Ftemplate._templateInfo%3Breturn%20templateInfo%26%26templateInfo.content%7C%7Ctemplate.content%3B%7D%7D%5D)%3Breturn%20TemplateStamp%3B%7D(superClass)%3Breturn%20TemplateStamp%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Ftemplate-stamp.html.js%0A",
            "resourceBytes": 19930,
            "encodedBytes": 0,
            "unusedBytes": 8130
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7BObject%7D%20*%2Fvar%20CaseMap%3DPolymer.CaseMap%3B%2F%2F%20Monotonically%20increasing%20unique%20ID%20used%20for%20de-duping%20effects%20triggered%0A%2F%2F%20from%20multiple%20properties%20in%20the%20same%20turn%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20Property%20effect%20types%3B%20effects%20are%20stored%20on%20the%20prototype%20using%20these%20keys%0A%20%20%20*%20%40enum%20%7Bstring%7D%0A%20%20%20*%2Fvar%20TYPES%3D%7BCOMPUTE%3A'__computeEffects'%2CREFLECT%3A'__reflectEffects'%2CNOTIFY%3A'__notifyEffects'%2CPROPAGATE%3A'__propagateEffects'%2COBSERVE%3A'__observeEffects'%2CREAD_ONLY%3A'__readOnly'%7D%3B%2F**%20%40const%20%7BRegExp%7D%20*%2Fvar%20capitalAttributeRegex%3D%2F%5BA-Z%5D%2F%3B%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20name%3A%20(string%20%7C%20undefined)%2C%0A%20%20%20*%20structured%3A%20(boolean%20%7C%20undefined)%2C%0A%20%20%20*%20wildcard%3A%20(boolean%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataTrigger%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20info%3A%20%3F%2C%0A%20%20%20*%20trigger%3A%20(!DataTrigger%20%7C%20undefined)%2C%0A%20%20%20*%20fn%3A%20(!Function%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataEffect%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0Avar%20PropertyEffectsType%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Ensures%20that%20the%20model%20has%20an%20own-property%20map%20of%20effects%20for%20the%20given%20type.%0A%20%20%20*%20The%20model%20may%20be%20a%20prototype%20or%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20Property%20effects%20are%20stored%20as%20arrays%20of%20effects%20by%20property%20in%20a%20map%2C%0A%20%20%20*%20by%20named%20type%20on%20the%20model.%20e.g.%0A%20%20%20*%0A%20%20%20*%20%20%20__computeEffects%3A%20%7B%0A%20%20%20*%20%20%20%20%20foo%3A%20%5B%20...%20%5D%2C%0A%20%20%20*%20%20%20%20%20bar%3A%20%5B%20...%20%5D%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20If%20the%20model%20does%20not%20yet%20have%20an%20effect%20map%20for%20the%20type%2C%20one%20is%20created%0A%20%20%20*%20and%20returned.%20%20If%20it%20does%2C%20but%20it%20is%20not%20an%20own%20property%20(i.e.%20the%0A%20%20%20*%20prototype%20had%20effects)%2C%20the%20the%20map%20is%20deeply%20cloned%20and%20the%20copy%20is%0A%20%20%20*%20set%20on%20the%20model%20and%20returned%2C%20ready%20for%20new%20effects%20to%20be%20added.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Property%20effect%20type%0A%20%20%20*%20%40return%20%7BObject%7D%20The%20own-property%20map%20of%20effects%20for%20the%20given%20type%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20ensureOwnEffectMap(model%2Ctype)%7Bvar%20effects%3Dmodel%5Btype%5D%3Bif(!effects)%7Beffects%3Dmodel%5Btype%5D%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(type))%7Beffects%3Dmodel%5Btype%5D%3DObject.create(model%5Btype%5D)%3Bfor(var%20p%20in%20effects)%7Bvar%20protoFx%3Deffects%5Bp%5D%3Bvar%20instFx%3Deffects%5Bp%5D%3DArray(protoFx.length)%3Bfor(var%20i%3D0%3Bi%3CprotoFx.length%3Bi%2B%2B)%7BinstFx%5Bi%5D%3DprotoFx%5Bi%5D%3B%7D%7D%7Dreturn%20effects%3B%7D%2F%2F%20--%20effects%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Runs%20all%20effects%20of%20a%20given%20type%20for%20the%20given%20set%20of%20property%20changes%0A%20%20%20*%20on%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffects(inst%2Ceffects%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bif(effects)%7Bvar%20ran%3Dfalse%3Bvar%20id%3DdedupeId%2B%2B%3Bfor(var%20prop%20in%20props)%7Bif(runEffectsForProperty(inst%2Ceffects%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs))%7Bran%3Dtrue%3B%7D%7Dreturn%20ran%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Runs%20a%20list%20of%20effects%20for%20a%20given%20property.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7Bnumber%7D%20dedupeId%20Counter%20used%20for%20de-duping%20effects%0A%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Name%20of%20changed%20property%0A%20%20%20*%20%40param%20%7B*%7D%20props%20Changed%20properties%0A%20%20%20*%20%40param%20%7B*%7D%20oldProps%20Old%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffectsForProperty(inst%2Ceffects%2CdedupeId%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bvar%20ran%3Dfalse%3Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(prop)%3Aprop%3Bvar%20fxs%3Deffects%5BrootProperty%5D%3Bif(fxs)%7Bfor(var%20i%3D0%2Cl%3Dfxs.length%2Cfx%3Bi%3Cl%26%26(fx%3Dfxs%5Bi%5D)%3Bi%2B%2B)%7Bif((!fx.info%7C%7Cfx.info.lastRun!%3D%3DdedupeId)%26%26(!hasPaths%7C%7CpathMatchesTrigger(prop%2Cfx.trigger)))%7Bif(fx.info)%7Bfx.info.lastRun%3DdedupeId%3B%7Dfx.fn(inst%2Cprop%2Cprops%2ColdProps%2Cfx.info%2ChasPaths%2CextraArgs)%3Bran%3Dtrue%3B%7D%7D%7Dreturn%20ran%3B%7D%2F**%0A%20%20%20*%20Determines%20whether%20a%20property%2Fpath%20that%20has%20changed%20matches%20the%20trigger%0A%20%20%20*%20criteria%20for%20an%20effect.%20%20A%20trigger%20is%20a%20descriptor%20with%20the%20following%0A%20%20%20*%20structure%2C%20which%20matches%20the%20descriptors%20returned%20from%20%60parseArg%60.%0A%20%20%20*%20e.g.%20for%20%60foo.bar.*%60%3A%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20trigger%3A%20%7B%0A%20%20%20*%20%20%20name%3A%20'a.b'%2C%0A%20%20%20*%20%20%20structured%3A%20true%2C%0A%20%20%20*%20%20%20wildcard%3A%20true%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20If%20no%20trigger%20is%20given%2C%20the%20path%20is%20deemed%20to%20match.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20or%20property%20that%20changed%0A%20%20%20*%20%40param%20%7BDataTrigger%7D%20trigger%20Descriptor%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20path%20matched%20the%20trigger%0A%20%20%20*%2Ffunction%20pathMatchesTrigger(path%2Ctrigger)%7Bif(trigger)%7Bvar%20triggerPath%3Dtrigger.name%3Breturn%20triggerPath%3D%3Dpath%7C%7Ctrigger.structured%26%26Polymer.Path.isAncestor(triggerPath%2Cpath)%7C%7Ctrigger.wildcard%26%26Polymer.Path.isDescendant(triggerPath%2Cpath)%3B%7Delse%7Breturn%20true%3B%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22observer%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Calls%20the%20method%20with%20%60info.methodName%60%20on%20the%20instance%2C%20passing%20the%0A%20%20%20*%20new%20and%20old%20values.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runObserverEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20fn%3Dtypeof%20info.method%3D%3D%3D%22string%22%3Finst%5Binfo.method%5D%3Ainfo.method%3Bvar%20changedProp%3Dinfo.property%3Bif(fn)%7Bfn.call(inst%2Cinst.__data%5BchangedProp%5D%2ColdProps%5BchangedProp%5D)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('observer%20method%20%60'%2Binfo.method%2B'%60%20not%20defined')%3B%7D%7D%2F**%0A%20%20%20*%20Runs%20%22notify%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20will%20dispatch%20path%20notification%20events%20in%20the%20case%20that%20the%20property%0A%20%20%20*%20changed%20was%20a%20path%20and%20the%20root%20property%20for%20that%20path%20didn't%20have%20a%0A%20%20%20*%20%22notify%22%20effect.%20%20This%20is%20to%20maintain%201.0%20behavior%20that%20did%20not%20require%0A%20%20%20*%20%60notify%3A%20true%60%20to%20ensure%20object%20sub-property%20notifications%20were%0A%20%20%20*%20sent.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20notifyProps%20Bag%20of%20properties%20to%20notify%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffects(inst%2CnotifyProps%2Cprops%2ColdProps%2ChasPaths)%7B%2F%2F%20Notify%0Avar%20fxs%3Dinst%5BTYPES.NOTIFY%5D%3Bvar%20notified%3Dvoid%200%3Bvar%20id%3DdedupeId%2B%2B%3B%2F%2F%20Try%20normal%20notify%20effects%3B%20if%20none%2C%20fall%20back%20to%20try%20path%20notification%0Afor(var%20prop%20in%20notifyProps)%7Bif(notifyProps%5Bprop%5D)%7Bif(fxs%26%26runEffectsForProperty(inst%2Cfxs%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths))%7Bnotified%3Dtrue%3B%7Delse%20if(hasPaths%26%26notifyPath(inst%2Cprop%2Cprops))%7Bnotified%3Dtrue%3B%7D%7D%7D%2F%2F%20Flush%20host%20if%20we%20actually%20notified%20and%20host%20was%20batching%0A%2F%2F%20And%20the%20host%20has%20already%20initialized%20clients%3B%20this%20prevents%0A%2F%2F%20an%20issue%20with%20a%20host%20observing%20data%20changes%20before%20clients%20are%20ready.%0Avar%20host%3Dvoid%200%3Bif(notified%26%26(host%3Dinst.__dataHost)%26%26host._invalidateProperties)%7Bhost._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20with%20path%20information%20in%20the%20detail%0A%20%20%20*%20object%20to%20indicate%20a%20sub-path%20of%20the%20property%20was%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20that%20was%20changed%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20path%20was%20notified%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifyPath(inst%2Cpath%2Cprops)%7Bvar%20rootProperty%3DPolymer.Path.root(path)%3Bif(rootProperty!%3D%3Dpath)%7Bvar%20eventName%3DPolymer.CaseMap.camelToDashCase(rootProperty)%2B'-changed'%3BdispatchNotifyEvent(inst%2CeventName%2Cprops%5Bpath%5D%2Cpath)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20to%20indicate%20a%20property%20(or%20path)%0A%20%20%20*%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20The%20name%20of%20the%20event%20to%20send%20('%7Bproperty%7D-changed')%0A%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20of%20the%20changed%20property%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20null%20%7C%20undefined%7D%20path%20If%20a%20sub-path%20of%20this%20property%20changed%2C%20the%20path%0A%20%20%20*%20%20%20that%20changed%20(optional).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2Ffunction%20dispatchNotifyEvent(inst%2CeventName%2Cvalue%2Cpath)%7Bvar%20detail%3D%7Bvalue%3Avalue%2CqueueProperty%3Atrue%7D%3Bif(path)%7Bdetail.path%3Dpath%3B%7D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finst.dispatchEvent(new%20CustomEvent(eventName%2C%7Bdetail%3Adetail%7D))%3B%7D%2F**%0A%20%20%20*%20Implements%20the%20%22notify%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Dispatches%20a%20non-bubbling%20event%20named%20%60info.eventName%60%20on%20the%20instance%0A%20%20%20*%20with%20a%20detail%20object%20containing%20the%20new%20%60value%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo%2ChasPaths)%7Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(property)%3Aproperty%3Bvar%20path%3DrootProperty!%3Dproperty%3Fproperty%3Anull%3Bvar%20value%3Dpath%3FPolymer.Path.get(inst%2Cpath)%3Ainst.__data%5Bproperty%5D%3Bif(path%26%26value%3D%3D%3Dundefined)%7Bvalue%3Dprops%5Bproperty%5D%3B%2F%2F%20specifically%20for%20.splices%0A%7DdispatchNotifyEvent(inst%2Cinfo.eventName%2Cvalue%2Cpath)%3B%7D%2F**%0A%20%20%20*%20Handler%20function%20for%202-way%20notification%20events.%20Receives%20context%0A%20%20%20*%20information%20captured%20in%20the%20%60addNotifyListener%60%20closure%20from%20the%0A%20%20%20*%20%60__notifyListeners%60%20metadata.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20value%20of%20the%20notified%20property%20to%20the%20host%20property%20or%20path.%20%20If%0A%20%20%20*%20the%20event%20contained%20path%20information%2C%20translate%20that%20path%20to%20the%20host%0A%20%20%20*%20scope's%20name%20for%20that%20path%20first.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BCustomEvent%7D%20event%20Notification%20event%20(e.g.%20'%3Cproperty%3E-changed')%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20handling%20the%20notification%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20fromProp%20Child%20element%20property%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bstring%7D%20toPath%20Host%20property%2Fpath%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bboolean%7D%20negate%20Whether%20the%20binding%20was%20negated%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20handleNotification(event%2Cinst%2CfromProp%2CtoPath%2Cnegate)%7Bvar%20value%3Dvoid%200%3Bvar%20detail%3D%2F**%20%40type%20%7BObject%7D%20*%2Fevent.detail%3Bvar%20fromPath%3Ddetail%26%26detail.path%3Bif(fromPath)%7BtoPath%3DPolymer.Path.translate(fromProp%2CtoPath%2CfromPath)%3Bvalue%3Ddetail%26%26detail.value%3B%7Delse%7Bvalue%3Devent.currentTarget%5BfromProp%5D%3B%7Dvalue%3Dnegate%3F!value%3Avalue%3Bif(!inst%5BTYPES.READ_ONLY%5D%7C%7C!inst%5BTYPES.READ_ONLY%5D%5BtoPath%5D)%7Bif(inst._setPendingPropertyOrPath(toPath%2Cvalue%2Ctrue%2CBoolean(fromPath))%26%26(!detail%7C%7C!detail.queueProperty))%7Binst._invalidateProperties()%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22reflect%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20attribute%20named%20%60info.attrName%60%20to%20the%20given%20property%20value.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runReflectEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20value%3Dinst.__data%5Bproperty%5D%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cinfo.attrName%2C'attribute'%2C%2F**%20%40type%20%7BNode%7D%20*%2Finst)%3B%7Dinst._propertyToAttribute(property%2Cinfo.attrName%2Cvalue)%3B%7D%2F**%0A%20%20%20*%20Runs%20%22computed%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20continues%20to%20run%20computed%20effects%20based%20on%20the%20output%20of%20each%20pass%20until%0A%20%20%20*%20there%20are%20no%20more%20newly%20computed%20properties.%20%20This%20ensures%20that%20all%0A%20%20%20*%20properties%20that%20will%20be%20computed%20by%20the%20initial%20set%20of%20changes%20are%0A%20%20%20*%20computed%20before%20other%20effects%20(binding%20propagation%2C%20observers%2C%20and%20notify)%0A%20%20%20*%20run.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffects(inst%2CchangedProps%2ColdProps%2ChasPaths)%7Bvar%20computeEffects%3Dinst%5BTYPES.COMPUTE%5D%3Bif(computeEffects)%7Bvar%20inputProps%3DchangedProps%3Bwhile(runEffects(inst%2CcomputeEffects%2CinputProps%2ColdProps%2ChasPaths))%7BObject.assign(oldProps%2Cinst.__dataOld)%3BObject.assign(changedProps%2Cinst.__dataPending)%3BinputProps%3Dinst.__dataPending%3Binst.__dataPending%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22computed%20property%22%20effect%20by%20running%20the%20method%20with%20the%0A%20%20%20*%20values%20of%20the%20arguments%20specified%20in%20the%20%60info%60%20object%20and%20setting%20the%0A%20%20%20*%20return%20value%20to%20the%20computed%20property%20specified.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20result%3DrunMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%3Bvar%20computedProp%3Dinfo.methodInfo%3Bif(inst.__dataHasAccessor%26%26inst.__dataHasAccessor%5BcomputedProp%5D)%7Binst._setPendingProperty(computedProp%2Cresult%2Ctrue)%3B%7Delse%7Binst%5BcomputedProp%5D%3Dresult%3B%7D%7D%2F**%0A%20%20%20*%20Computes%20path%20changes%20based%20on%20path%20links%20set%20up%20using%20the%20%60linkPaths%60%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20whose%20props%20are%20changing%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3C(string%7Cnumber)%3E%7D%20path%20Path%20that%20has%20changed%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20changed%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeLinkedPaths(inst%2Cpath%2Cvalue)%7Bvar%20links%3Dinst.__dataLinkedPaths%3Bif(links)%7Bvar%20link%3Dvoid%200%3Bfor(var%20a%20in%20links)%7Bvar%20b%3Dlinks%5Ba%5D%3Bif(Polymer.Path.isDescendant(a%2Cpath))%7Blink%3DPolymer.Path.translate(a%2Cb%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7Delse%20if(Polymer.Path.isDescendant(b%2Cpath))%7Blink%3DPolymer.Path.translate(b%2Ca%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7D%7D%7D%7D%2F%2F%20--%20bindings%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Adds%20binding%20metadata%20to%20the%20current%20%60nodeInfo%60%2C%20and%20binding%20effects%0A%20%20%20*%20for%20all%20part%20dependencies%20to%20%60templateInfo%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20*%20%40param%20%7Bstring%7D%20kind%20Binding%20kind%2C%20either%20'property'%2C%20'attribute'%2C%20or%20'text'%0A%20%20%20*%20%40param%20%7Bstring%7D%20target%20Target%20property%20name%0A%20%20%20*%20%40param%20%7B!Array%3C!BindingPart%3E%7D%20parts%20Array%20of%20binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bstring%3D%7D%20literal%20Literal%20text%20surrounding%20binding%20parts%20(specified%0A%20%20%20*%20%20%20only%20for%20'property'%20bindings%2C%20since%20these%20must%20be%20initialized%20as%20part%0A%20%20%20*%20%20%20of%20boot-up)%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addBinding(constructor%2CtemplateInfo%2CnodeInfo%2Ckind%2Ctarget%2Cparts%2Cliteral)%7B%2F%2F%20Create%20binding%20metadata%20and%20add%20to%20nodeInfo%0AnodeInfo.bindings%3DnodeInfo.bindings%7C%7C%5B%5D%3Bvar%2F**%20Binding%20*%2Fbinding%3D%7Bkind%3Akind%2Ctarget%3Atarget%2Cparts%3Aparts%2Cliteral%3Aliteral%2CisCompound%3Aparts.length!%3D%3D1%7D%3BnodeInfo.bindings.push(binding)%3B%2F%2F%20Add%20listener%20info%20to%20binding%20metadata%0Aif(shouldAddListener(binding))%7Bvar%20_binding%24parts%24%3Dbinding.parts%5B0%5D%2Cevent%3D_binding%24parts%24.event%2Cnegate%3D_binding%24parts%24.negate%3Bbinding.listenerEvent%3Devent%7C%7CCaseMap.camelToDashCase(target)%2B'-changed'%3Bbinding.listenerNegate%3Dnegate%3B%7D%2F%2F%20Add%20%22propagate%22%20property%20effects%20to%20templateInfo%0Avar%20index%3DtemplateInfo.nodeInfoList.length%3Bfor(var%20i%3D0%3Bi%3Cbinding.parts.length%3Bi%2B%2B)%7Bvar%20part%3Dbinding.parts%5Bi%5D%3Bpart.compoundIndex%3Di%3BaddEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%3B%7D%7D%2F**%0A%20%20%20*%20Adds%20property%20effects%20to%20the%20given%20%60templateInfo%60%20for%20the%20given%20binding%0A%20%20%20*%20part.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20into%20%60nodeInfoList%60%20for%20this%20node%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20addEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%7Bif(!part.literal)%7Bif(binding.kind%3D%3D%3D'attribute'%26%26binding.target%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Cannot%20set%20attribute%20'%2Bbinding.target%2B'%20because%20%22-%22%20is%20not%20a%20valid%20attribute%20starting%20character')%3B%7Delse%7Bvar%20dependencies%3Dpart.dependencies%3Bvar%20info%3D%7Bindex%3Aindex%2Cbinding%3Abinding%2Cpart%3Apart%2Cevaluator%3Aconstructor%7D%3Bfor(var%20j%3D0%3Bj%3Cdependencies.length%3Bj%2B%2B)%7Bvar%20trigger%3Ddependencies%5Bj%5D%3Bif(typeof%20trigger%3D%3D'string')%7Btrigger%3DparseArg(trigger)%3Btrigger.wildcard%3Dtrue%3B%7Dconstructor._addTemplatePropertyEffect(templateInfo%2Ctrigger.rootProperty%2C%7Bfn%3ArunBindingEffect%2Cinfo%3Ainfo%2Ctrigger%3Atrigger%7D)%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22binding%22%20(property%2Fpath%20binding)%20effect.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20binding%20syntax%20is%20overridable%20via%20%60_parseBindings%60%20and%0A%20%20%20*%20%60_evaluateBinding%60.%20%20This%20method%20will%20call%20%60_evaluateBinding%60%20for%20any%0A%20%20%20*%20non-literal%20parts%20returned%20from%20%60_parseBindings%60.%20%20However%2C%0A%20%20%20*%20there%20is%20no%20support%20for%20_path_%20bindings%20via%20custom%20binding%20parts%2C%0A%20%20%20*%20as%20this%20is%20specific%20to%20Polymer's%20path%20binding%20syntax.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7BArray%7D%20nodeList%20List%20of%20nodes%20associated%20with%20%60nodeInfoList%60%20template%0A%20%20%20*%20%20%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runBindingEffect(inst%2Cpath%2Cprops%2ColdProps%2Cinfo%2ChasPaths%2CnodeList)%7Bvar%20node%3DnodeList%5Binfo.index%5D%3Bvar%20binding%3Dinfo.binding%3Bvar%20part%3Dinfo.part%3B%2F%2F%20Subpath%20notification%3A%20transform%20path%20and%20set%20to%20client%0A%2F%2F%20e.g.%3A%20foo%3D%22%7B%7Bobj.sub%7D%7D%22%2C%20path%3A%20'obj.sub.prop'%2C%20set%20'foo.prop'%3Dobj.sub.prop%0Aif(hasPaths%26%26part.source%26%26path.length%3Epart.source.length%26%26binding.kind%3D%3D'property'%26%26!binding.isCompound%26%26node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bbinding.target%5D)%7Bvar%20value%3Dprops%5Bpath%5D%3Bpath%3DPolymer.Path.translate(part.source%2Cbinding.target%2Cpath)%3Bif(node._setPendingPropertyOrPath(path%2Cvalue%2Cfalse%2Ctrue))%7Binst._enqueueClient(node)%3B%7D%7Delse%7Bvar%20_value%3Dinfo.evaluator._evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%3B%2F%2F%20Propagate%20value%20to%20child%0AapplyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2C_value)%3B%7D%7D%2F**%0A%20%20%20*%20Sets%20the%20value%20for%20an%20%22binding%22%20(binding)%20effect%20to%20a%20node%2C%0A%20%20%20*%20either%20as%20a%20property%20or%20attribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20owning%20the%20binding%20effect%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Target%20node%20for%20binding%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20applyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2Cvalue)%7Bvalue%3DcomputeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cbinding.target%2Cbinding.kind%2Cnode)%3B%7Dif(binding.kind%3D%3D'attribute')%7B%2F%2F%20Attribute%20binding%0Ainst._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%2Cvalue%2Cbinding.target)%3B%7Delse%7B%2F%2F%20Property%20binding%0Avar%20prop%3Dbinding.target%3Bif(node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bprop%5D)%7Bif(!node%5BTYPES.READ_ONLY%5D%7C%7C!node%5BTYPES.READ_ONLY%5D%5Bprop%5D)%7Bif(node._setPendingProperty(prop%2Cvalue))%7Binst._enqueueClient(node)%3B%7D%7D%7Delse%7Binst._setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%3B%7D%7D%7D%2F**%0A%20%20%20*%20Transforms%20an%20%22binding%22%20effect%20value%20based%20on%20compound%20%26%20negation%0A%20%20%20*%20effect%20metadata%2C%20as%20well%20as%20handling%20for%20special-case%20properties%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20the%20value%20will%20be%20set%20to%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Transformed%20value%20to%20set%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%7Bif(binding.isCompound)%7Bvar%20storage%3Dnode.__dataCompoundStorage%5Bbinding.target%5D%3Bstorage%5Bpart.compoundIndex%5D%3Dvalue%3Bvalue%3Dstorage.join('')%3B%7Dif(binding.kind!%3D%3D'attribute')%7B%2F%2F%20Some%20browsers%20serialize%20%60undefined%60%20to%20%60%22undefined%22%60%0Aif(binding.target%3D%3D%3D'textContent'%7C%7Cbinding.target%3D%3D%3D'value'%26%26(node.localName%3D%3D%3D'input'%7C%7Cnode.localName%3D%3D%3D'textarea'))%7Bvalue%3Dvalue%3D%3Dundefined%3F''%3Avalue%3B%7D%7Dreturn%20value%3B%7D%2F**%0A%20%20%20*%20Returns%20true%20if%20a%20binding's%20metadata%20meets%20all%20the%20requirements%20to%20allow%0A%20%20%20*%202-way%20binding%2C%20and%20therefore%20a%20%60%3Cproperty%3E-changed%60%20event%20listener%20should%20be%0A%20%20%20*%20added%3A%0A%20%20%20*%20-%20used%20curly%20braces%0A%20%20%20*%20-%20is%20a%20property%20(not%20attribute)%20binding%0A%20%20%20*%20-%20is%20not%20a%20textContent%20binding%0A%20%20%20*%20-%20is%20not%20compound%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%202-way%20listener%20should%20be%20added%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20shouldAddListener(binding)%7Breturn%20Boolean(binding.target)%26%26binding.kind!%3D'attribute'%26%26binding.kind!%3D'text'%26%26!binding.isCompound%26%26binding.parts%5B0%5D.mode%3D%3D%3D'%7B'%3B%7D%2F**%0A%20%20%20*%20Setup%20compound%20binding%20storage%20structures%2C%20notify%20listeners%2C%20and%20dataHost%0A%20%20%20*%20references%20onto%20the%20bound%20nodeList.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20that%20bas%20been%20previously%20bound%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupBindings(inst%2CtemplateInfo)%7B%2F%2F%20Setup%20compound%20storage%2C%20dataHost%2C%20and%20notify%20listeners%0Avar%20nodeList%3DtemplateInfo.nodeList%2CnodeInfoList%3DtemplateInfo.nodeInfoList%3Bif(nodeInfoList.length)%7Bfor(var%20i%3D0%3Bi%3CnodeInfoList.length%3Bi%2B%2B)%7Bvar%20info%3DnodeInfoList%5Bi%5D%3Bvar%20node%3DnodeList%5Bi%5D%3Bvar%20bindings%3Dinfo.bindings%3Bif(bindings)%7Bfor(var%20_i%3D0%3B_i%3Cbindings.length%3B_i%2B%2B)%7Bvar%20binding%3Dbindings%5B_i%5D%3BsetupCompoundStorage(node%2Cbinding)%3BaddNotifyListener(node%2Cinst%2Cbinding)%3B%7D%7Dnode.__dataHost%3Dinst%3B%7D%7D%7D%2F**%0A%20%20%20*%20Initializes%20%60__dataCompoundStorage%60%20local%20storage%20on%20a%20bound%20node%20with%0A%20%20%20*%20initial%20literal%20data%20for%20compound%20bindings%2C%20and%20sets%20the%20joined%0A%20%20%20*%20literal%20parts%20to%20the%20bound%20property.%0A%20%20%20*%0A%20%20%20*%20When%20changes%20to%20compound%20parts%20occur%2C%20they%20are%20first%20set%20into%20the%20compound%0A%20%20%20*%20storage%20array%20for%20that%20property%2C%20and%20then%20the%20array%20is%20joined%20to%20result%20in%0A%20%20%20*%20the%20final%20value%20set%20to%20the%20property%2Fattribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Bound%20node%20to%20initialize%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupCompoundStorage(node%2Cbinding)%7Bif(binding.isCompound)%7B%2F%2F%20Create%20compound%20storage%20map%0Avar%20storage%3Dnode.__dataCompoundStorage%7C%7C(node.__dataCompoundStorage%3D%7B%7D)%3Bvar%20parts%3Dbinding.parts%3B%2F%2F%20Copy%20literals%20from%20parts%20into%20storage%20for%20this%20binding%0Avar%20literals%3Dnew%20Array(parts.length)%3Bfor(var%20j%3D0%3Bj%3Cparts.length%3Bj%2B%2B)%7Bliterals%5Bj%5D%3Dparts%5Bj%5D.literal%3B%7Dvar%20target%3Dbinding.target%3Bstorage%5Btarget%5D%3Dliterals%3B%2F%2F%20Configure%20properties%20with%20their%20literal%20parts%0Aif(binding.literal%26%26binding.kind%3D%3D'property')%7Bnode%5Btarget%5D%3Dbinding.literal%3B%7D%7D%7D%2F**%0A%20%20%20*%20Adds%20a%202-way%20binding%20notification%20event%20listener%20to%20the%20node%20specified%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20node%20Child%20element%20to%20add%20listener%20to%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20to%20handle%20notification%20event%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addNotifyListener(node%2Cinst%2Cbinding)%7Bif(binding.listenerEvent)%7Bvar%20part%3Dbinding.parts%5B0%5D%3Bnode.addEventListener(binding.listenerEvent%2Cfunction(e)%7BhandleNotification(e%2Cinst%2Cbinding.target%2Cpart.source%2Cpart.negate)%3B%7D)%3B%7D%7D%2F%2F%20--%20for%20method-based%20effects%20(complexObserver%20%26%20computed)%20--------------%0A%2F**%0A%20%20%20*%20Adds%20property%20effects%20for%20each%20argument%20in%20the%20method%20signature%20(and%0A%20%20%20*%20optionally%2C%20for%20the%20method%20name%20if%20%60dynamic%60%20is%20true)%20that%20calls%20the%0A%20%20%20*%20provided%20effect%20function.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BElement%20%7C%20Object%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Type%20of%20property%20effect%20to%20add%0A%20%20%20*%20%40param%20%7BFunction%7D%20effectFn%20Function%20to%20run%20when%20arguments%20change%0A%20%20%20*%20%40param%20%7B*%3D%7D%20methodInfo%20Effect-specific%20information%20to%20be%20included%20in%0A%20%20%20*%20%20%20method%20effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%20Note%2C%0A%20%20%20*%20%20%20defaults%20to%20true%20if%20the%20signature%20is%20static%20(sig.static%20is%20true).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20createMethodEffect(model%2Csig%2Ctype%2CeffectFn%2CmethodInfo%2CdynamicFn)%7BdynamicFn%3Dsig.static%7C%7CdynamicFn%26%26((typeof%20dynamicFn%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(dynamicFn))!%3D%3D'object'%7C%7CdynamicFn%5Bsig.methodName%5D)%3Bvar%20info%3D%7BmethodName%3Asig.methodName%2Cargs%3Asig.args%2CmethodInfo%3AmethodInfo%2CdynamicFn%3AdynamicFn%7D%3Bfor(var%20i%3D0%2Carg%3Bi%3Csig.args.length%26%26(arg%3Dsig.args%5Bi%5D)%3Bi%2B%2B)%7Bif(!arg.literal)%7Bmodel._addPropertyEffect(arg.rootProperty%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%2Ctrigger%3Aarg%7D)%3B%7D%7Dif(dynamicFn)%7Bmodel._addPropertyEffect(sig.methodName%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%7D)%3B%7D%7D%2F**%0A%20%20%20*%20Calls%20a%20method%20with%20arguments%20marshaled%20from%20properties%20on%20the%20instance%0A%20%20%20*%20based%20on%20the%20method%20signature%20contained%20in%20the%20effect%20metadata.%0A%20%20%20*%0A%20%20%20*%20Multi-property%20observers%2C%20computed%20properties%2C%20and%20inline%20computing%0A%20%20%20*%20functions%20call%20this%20function%20to%20invoke%20the%20method%2C%20then%20use%20the%20return%0A%20%20%20*%20value%20accordingly.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20return%20value%20from%20the%20method%20invocation%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Avar%20context%3Dinst._methodHost%7C%7Cinst%3Bvar%20fn%3Dcontext%5Binfo.methodName%5D%3Bif(fn)%7Bvar%20args%3Dinst._marshalArgs(info.args%2Cproperty%2Cprops)%3Breturn%20fn.apply(context%2Cargs)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('method%20%60'%2Binfo.methodName%2B'%60%20not%20defined')%3B%7D%7Dvar%20emptyArray%3D%5B%5D%3B%2F%2F%20Regular%20expressions%20used%20for%20binding%0Avar%20IDENT%3D'(%3F%3A'%2B'%5Ba-zA-Z_%24%5D%5B%5C%5Cw.%3A%24%5C%5C-*%5D*'%2B')'%3Bvar%20NUMBER%3D'(%3F%3A'%2B'%5B-%2B%5D%3F%5B0-9%5D*%5C%5C.%3F%5B0-9%5D%2B(%3F%3A%5BeE%5D%5B-%2B%5D%3F%5B0-9%5D%2B)%3F'%2B')'%3Bvar%20SQUOTE_STRING%3D'(%3F%3A'%2B'%5C'(%3F%3A%5B%5E%5C'%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%5C''%2B')'%3Bvar%20DQUOTE_STRING%3D'(%3F%3A'%2B'%22(%3F%3A%5B%5E%22%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%22'%2B')'%3Bvar%20STRING%3D'(%3F%3A'%2BSQUOTE_STRING%2B'%7C'%2BDQUOTE_STRING%2B')'%3Bvar%20ARGUMENT%3D'(%3F%3A('%2BIDENT%2B'%7C'%2BNUMBER%2B'%7C'%2BSTRING%2B')%5C%5Cs*'%2B')'%3Bvar%20ARGUMENTS%3D'(%3F%3A'%2BARGUMENT%2B'(%3F%3A%2C%5C%5Cs*'%2BARGUMENT%2B')*'%2B')'%3Bvar%20ARGUMENT_LIST%3D'(%3F%3A'%2B'%5C%5C(%5C%5Cs*'%2B'(%3F%3A'%2BARGUMENTS%2B'%3F'%2B')'%2B'%5C%5C)%5C%5Cs*'%2B')'%3Bvar%20BINDING%3D'('%2BIDENT%2B'%5C%5Cs*'%2BARGUMENT_LIST%2B'%3F'%2B')'%3B%2F%2F%20Group%203%0Avar%20OPEN_BRACKET%3D'(%5C%5C%5B%5C%5C%5B%7C%7B%7B)'%2B'%5C%5Cs*'%3Bvar%20CLOSE_BRACKET%3D'(%3F%3A%5D%5D%7C%7D%7D)'%3Bvar%20NEGATE%3D'(%3F%3A(!)%5C%5Cs*)%3F'%3B%2F%2F%20Group%202%0Avar%20EXPRESSION%3DOPEN_BRACKET%2BNEGATE%2BBINDING%2BCLOSE_BRACKET%3Bvar%20bindingRegex%3Dnew%20RegExp(EXPRESSION%2C%22g%22)%3B%2F**%0A%20%20%20*%20Create%20a%20string%20from%20binding%20parts%20of%20all%20the%20literal%20parts%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3CBindingPart%3E%7D%20parts%20All%20parts%20to%20stringify%0A%20%20%20*%20%40return%20%7Bstring%7D%20String%20made%20from%20the%20literal%20parts%0A%20%20%20*%2Ffunction%20literalFromParts(parts)%7Bvar%20s%3D''%3Bfor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bvar%20literal%3Dparts%5Bi%5D.literal%3Bs%2B%3Dliteral%7C%7C''%3B%7Dreturn%20s%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20expression%20string%20for%20a%20method%20signature%2C%20and%20returns%20a%20metadata%0A%20%20%20*%20describing%20the%20method%20in%20terms%20of%20%60methodName%60%2C%20%60static%60%20(whether%20all%20the%0A%20%20%20*%20arguments%20are%20literals)%2C%20and%20an%20array%20of%20%60args%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20expression%20The%20expression%20to%20parse%0A%20%20%20*%20%40return%20%7B%3FMethodSignature%7D%20The%20method%20metadata%20object%20if%20a%20method%20expression%20was%0A%20%20%20*%20%20%20found%2C%20otherwise%20%60undefined%60%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseMethod(expression)%7B%2F%2F%20tries%20to%20match%20valid%20javascript%20property%20names%0Avar%20m%3Dexpression.match(%2F(%5B%5E%5Cs%5D%2B%3F)%5C((%5B%5Cs%5CS%5D*)%5C)%2F)%3Bif(m)%7Bvar%20methodName%3Dm%5B1%5D%3Bvar%20sig%3D%7BmethodName%3AmethodName%2Cstatic%3Atrue%2Cargs%3AemptyArray%7D%3Bif(m%5B2%5D.trim())%7B%2F%2F%20replace%20escaped%20commas%20with%20comma%20entity%2C%20split%20on%20un-escaped%20commas%0Avar%20args%3Dm%5B2%5D.replace(%2F%5C%5C%2C%2Fg%2C'%26comma%3B').split('%2C')%3Breturn%20parseArgs(args%2Csig)%3B%7Delse%7Breturn%20sig%3B%7D%7Dreturn%20null%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20array%20of%20arguments%20and%20sets%20the%20%60args%60%20property%20of%20the%20supplied%0A%20%20%20*%20signature%20metadata%20object.%20Sets%20the%20%60static%60%20property%20to%20false%20if%20any%0A%20%20%20*%20argument%20is%20a%20non-literal.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3Cstring%3E%7D%20argList%20Array%20of%20argument%20names%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%20object%0A%20%20%20*%20%40return%20%7B!MethodSignature%7D%20The%20updated%20signature%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArgs(argList%2Csig)%7Bsig.args%3DargList.map(function(rawArg)%7Bvar%20arg%3DparseArg(rawArg)%3Bif(!arg.literal)%7Bsig.static%3Dfalse%3B%7Dreturn%20arg%3B%7D%2Cthis)%3Breturn%20sig%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20individual%20argument%2C%20and%20returns%20an%20argument%20metadata%20object%0A%20%20%20*%20with%20the%20following%20fields%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%7B%0A%20%20%20*%20%20%20%20%20value%3A%20'prop'%2C%20%20%20%20%20%20%20%20%2F%2F%20property%2Fpath%20or%20literal%20value%0A%20%20%20*%20%20%20%20%20literal%3A%20false%2C%20%20%20%20%20%20%20%2F%2F%20whether%20argument%20is%20a%20literal%0A%20%20%20*%20%20%20%20%20structured%3A%20false%2C%20%20%20%20%2F%2F%20whether%20the%20property%20is%20a%20path%0A%20%20%20*%20%20%20%20%20rootProperty%3A%20'prop'%2C%20%2F%2F%20the%20root%20property%20of%20the%20path%0A%20%20%20*%20%20%20%20%20wildcard%3A%20false%20%20%20%20%20%20%20%2F%2F%20whether%20the%20argument%20was%20a%20wildcard%20'.*'%20path%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20rawArg%20The%20string%20value%20of%20the%20argument%0A%20%20%20*%20%40return%20%7B!MethodArg%7D%20Argument%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArg(rawArg)%7B%2F%2F%20clean%20up%20whitespace%0Avar%20arg%3DrawArg.trim()%2F%2F%20replace%20comma%20entity%20with%20comma%0A.replace(%2F%26comma%3B%2Fg%2C'%2C')%2F%2F%20repair%20extra%20escape%20sequences%3B%20note%20only%20commas%20strictly%20need%0A%2F%2F%20escaping%2C%20but%20we%20allow%20any%20other%20char%20to%20be%20escaped%20since%20its%0A%2F%2F%20likely%20users%20will%20do%20this%0A.replace(%2F%5C%5C(.)%2Fg%2C'%5C%241')%3B%2F%2F%20basic%20argument%20descriptor%0Avar%20a%3D%7Bname%3Aarg%2Cvalue%3A''%2Cliteral%3Afalse%7D%3B%2F%2F%20detect%20literal%20value%20(must%20be%20String%20or%20Number)%0Avar%20fc%3Darg%5B0%5D%3Bif(fc%3D%3D%3D'-')%7Bfc%3Darg%5B1%5D%3B%7Dif(fc%3E%3D'0'%26%26fc%3C%3D'9')%7Bfc%3D'%23'%3B%7Dswitch(fc)%7Bcase%22'%22%3Acase'%22'%3Aa.value%3Darg.slice(1%2C-1)%3Ba.literal%3Dtrue%3Bbreak%3Bcase'%23'%3Aa.value%3DNumber(arg)%3Ba.literal%3Dtrue%3Bbreak%3B%7D%2F%2F%20if%20not%20literal%2C%20look%20for%20structured%20path%0Aif(!a.literal)%7Ba.rootProperty%3DPolymer.Path.root(arg)%3B%2F%2F%20detect%20structured%20path%20(has%20dots)%0Aa.structured%3DPolymer.Path.isPath(arg)%3Bif(a.structured)%7Ba.wildcard%3Darg.slice(-2)%3D%3D'.*'%3Bif(a.wildcard)%7Ba.name%3Darg.slice(0%2C-2)%3B%7D%7D%7Dreturn%20a%3B%7D%2F%2F%20data%20api%0A%2F**%0A%20%20%20*%20Sends%20array%20splice%20notifications%20(%60.splices%60%20and%20%60.length%60)%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20_notifySplices(inst%2Carray%2Cpath%2Csplices)%7Bvar%20splicesPath%3Dpath%2B'.splices'%3Binst.notifyPath(splicesPath%2C%7BindexSplices%3Asplices%7D)%3Binst.notifyPath(path%2B'.length'%2Carray.length)%3B%2F%2F%20Null%20here%20to%20allow%20potentially%20large%20splice%20records%20to%20be%20GC'ed.%0Ainst.__data%5BsplicesPath%5D%3D%7BindexSplices%3Anull%7D%3B%7D%2F**%0A%20%20%20*%20Creates%20a%20splice%20record%20and%20sends%20an%20array%20splice%20notification%20for%0A%20%20%20*%20the%20described%20mutation%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20at%20which%20the%20array%20mutation%20occurred%0A%20%20%20*%20%40param%20%7Bnumber%7D%20addedCount%20Number%20of%20added%20items%0A%20%20%20*%20%40param%20%7BArray%7D%20removed%20Array%20of%20removed%20items%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifySplice(inst%2Carray%2Cpath%2Cindex%2CaddedCount%2Cremoved)%7B_notifySplices(inst%2Carray%2Cpath%2C%5B%7Bindex%3Aindex%2CaddedCount%3AaddedCount%2Cremoved%3Aremoved%2Cobject%3Aarray%2Ctype%3A'splice'%7D%5D)%3B%7D%2F**%0A%20%20%20*%20Returns%20an%20upper-cased%20version%20of%20the%20string.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20String%20to%20uppercase%0A%20%20%20*%20%40return%20%7Bstring%7D%20Uppercased%20string%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20upper(name)%7Breturn%20name%5B0%5D.toUpperCase()%2Bname.substring(1)%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%20template%0A%20%20%20*%20binding%20and%20data%20observation%20(collectively%2C%20%22property%20effects%22)%20system.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20uses%20provides%20the%20following%20key%20static%20methods%20for%20adding%0A%20%20%20*%20property%20effects%20to%20an%20element%20class%3A%0A%20%20%20*%20-%20%60addPropertyEffect%60%0A%20%20%20*%20-%20%60createPropertyObserver%60%0A%20%20%20*%20-%20%60createMethodObserver%60%0A%20%20%20*%20-%20%60createNotifyingProperty%60%0A%20%20%20*%20-%20%60createReadOnlyProperty%60%0A%20%20%20*%20-%20%60createReflectedProperty%60%0A%20%20%20*%20-%20%60createComputedProperty%60%0A%20%20%20*%20-%20%60bindTemplate%60%0A%20%20%20*%0A%20%20%20*%20Each%20method%20creates%20one%20or%20more%20property%20accessors%2C%20along%20with%20metadata%0A%20%20%20*%20used%20by%20this%20mixin's%20implementation%20of%20%60_propertiesChanged%60%20to%20perform%0A%20%20%20*%20the%20property%20effects.%0A%20%20%20*%0A%20%20%20*%20Underscored%20versions%20of%20the%20above%20methods%20also%20exist%20on%20the%20element%0A%20%20%20*%20prototype%20for%20adding%20property%20effects%20on%20instances%20at%20runtime.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20this%20mixin%20overrides%20several%20%60PropertyAccessors%60%20methods%2C%20in%0A%20%20%20*%20many%20cases%20to%20maintain%20guarantees%20provided%20by%20the%20Polymer%201.x%20features%3B%0A%20%20%20*%20notably%20it%20changes%20property%20accessors%20to%20be%20synchronous%20by%20default%0A%20%20%20*%20whereas%20the%20default%20when%20using%20%60PropertyAccessors%60%20standalone%20is%20to%20be%0A%20%20%20*%20async%20by%20default.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.TemplateStamp%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%0A%20%20%20*%20template%20binding%20and%20data%20observation%20system.%0A%20%20%20*%2FPolymer.PropertyEffects%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20propertyEffectsBase%3DPolymer.TemplateStamp(Polymer.PropertyAccessors(superClass))%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BpropertyEffectsBase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyEffects%3Dfunction(_propertyEffectsBase)%7B_inherits(PropertyEffects%2C_propertyEffectsBase)%3Bfunction%20PropertyEffects()%7B_classCallCheck(this%2CPropertyEffects)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F%2F%2F%20Used%20to%20identify%20users%20of%20this%20mixin%2C%20ala%20instanceof%0Avar%20_this%3D_possibleConstructorReturn(this%2C(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)).call(this))%3B_this.__isPropertyEffectsClient%3Dtrue%3B%2F**%20%40type%20%7Bnumber%7D%20*%2F%2F%2F%20NOTE%3A%20used%20to%20track%20re-entrant%20calls%20to%20%60_flushProperties%60%0A%2F%2F%20path%20changes%20dirty%20check%20against%20%60__dataTemp%60%20only%20during%20one%20%22turn%22%0A%2F%2F%20and%20are%20cleared%20when%20%60__dataCounter%60%20returns%20to%200.%0A_this.__dataCounter%3D0%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsReady%3B%2F**%20%40type%20%7BArray%7D%20*%2F_this.__dataPendingClients%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataToNotify%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataLinkedPaths%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataHasPaths%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataCompoundStorage%3B%2F**%20%40type%20%7BPolymer_PropertyEffects%7D%20*%2F_this.__dataHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataTemp%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsInitialized%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__data%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataPending%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataOld%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__computeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__reflectEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__notifyEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__propagateEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__observeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__readOnly%3B%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2F_this.__templateInfo%3Breturn%20_this%3B%7D_createClass(PropertyEffects%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3BhostStack.registerHost(this)%3Bthis.__dataClientsReady%3Dfalse%3Bthis.__dataPendingClients%3Dnull%3Bthis.__dataToNotify%3Dnull%3Bthis.__dataLinkedPaths%3Dnull%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20May%20be%20set%20on%20instance%20prior%20to%20upgrade%0Athis.__dataCompoundStorage%3Dthis.__dataCompoundStorage%7C%7Cnull%3Bthis.__dataHost%3Dthis.__dataHost%7C%7Cnull%3Bthis.__dataTemp%3D%7B%7D%3Bthis.__dataClientsInitialized%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20provide%20a%0A%20%20%20%20%20%20%20*%20more%20efficient%20implementation%20of%20initializing%20properties%20from%0A%20%20%20%20%20%20%20*%20the%20prototype%20on%20the%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bthis.__data%3DObject.create(props)%3Bthis.__dataPending%3DObject.create(props)%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20avoid%20setting%0A%20%20%20%20%20%20%20*%20%60_setProperty%60's%20%60shouldNotify%3A%20true%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20instance%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7Bvar%20readOnly%3Dthis%5BTYPES.READ_ONLY%5D%3Bfor(var%20prop%20in%20props)%7Bif(!readOnly%7C%7C!readOnly%5Bprop%5D)%7Bthis.__dataPending%3Dthis.__dataPending%7C%7C%7B%7D%3Bthis.__dataOld%3Dthis.__dataOld%7C%7C%7B%7D%3Bthis.__data%5Bprop%5D%3Dthis.__dataPending%5Bprop%5D%3Dprops%5Bprop%5D%3B%7D%7D%7D%2F%2F%20Prototype%20setup%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60addPropertyEffect%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyEffect'%2Cvalue%3Afunction%20_addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis._createPropertyAccessor(property%2Ctype%3D%3DTYPES.READ_ONLY)%3B%2F%2F%20effects%20are%20accumulated%20into%20arrays%20per%20property%20based%20on%20type%0Avar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bif(!effects)%7Beffects%3Dthis%5Btype%5D%5Bproperty%5D%3D%5B%5D%3B%7Deffects.push(effect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20the%20given%20property%20effect.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20the%20effect%20was%20associated%20with%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removePropertyEffect'%2Cvalue%3Afunction%20_removePropertyEffect(property%2Ctype%2Ceffect)%7Bvar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bvar%20idx%3Deffects.indexOf(effect)%3Bif(idx%3E%3D0)%7Beffects.splice(idx%2C1)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20property%20effect%0A%20%20%20%20%20%20%20*%20of%20a%20certain%20type.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasPropertyEffect'%2Cvalue%3Afunction%20_hasPropertyEffect(property%2Ctype)%7Bvar%20effects%3Dthis%5Btype%5D%3Breturn%20Boolean(effects%26%26effects%5Bproperty%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22read%20only%22%0A%20%20%20%20%20%20%20*%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReadOnlyEffect'%2Cvalue%3Afunction%20_hasReadOnlyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.READ_ONLY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22notify%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasNotifyEffect'%2Cvalue%3Afunction%20_hasNotifyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.NOTIFY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22reflect%20to%20attribute%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReflectEffect'%2Cvalue%3Afunction%20_hasReflectEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.REFLECT)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22computed%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasComputedEffect'%2Cvalue%3Afunction%20_hasComputedEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.COMPUTE)%3B%7D%2F%2F%20Runtime%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20pending%20property%20or%20path.%20%20If%20the%20root%20property%20of%20the%20path%20in%0A%20%20%20%20%20%20%20*%20question%20had%20no%20accessor%2C%20the%20path%20is%20set%2C%20otherwise%20it%20is%20enqueued%0A%20%20%20%20%20%20%20*%20via%20%60_setPendingProperty%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20isolates%20relatively%20expensive%20functionality%20necessary%0A%20%20%20%20%20%20%20*%20for%20the%20public%20API%20(%60set%60%2C%20%60setProperties%60%2C%20%60notifyPath%60%2C%20and%20property%0A%20%20%20%20%20%20%20*%20change%20listeners%20via%20%7B%7B...%7D%7D%20bindings)%2C%20such%20that%20it%20is%20only%20done%0A%20%20%20%20%20%20%20*%20when%20paths%20enter%20the%20system%2C%20and%20not%20at%20every%20propagation%20step.%20%20It%0A%20%20%20%20%20%20%20*%20also%20sets%20a%20%60__dataHasPaths%60%20flag%20on%20the%20instance%20which%20is%20used%20to%0A%20%20%20%20%20%20%20*%20fast-path%20slower%20path-matching%20code%20in%20the%20property%20effects%20host%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60path%60%20can%20be%20a%20path%20string%20or%20array%20of%20path%20parts%20as%20accepted%20by%20the%0A%20%20%20%20%20%20%20*%20public%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20Set%20to%20true%20if%20this%20change%20should%0A%20%20%20%20%20%20%20*%20%20cause%20a%20property%20notification%20event%20dispatch%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20isPathNotification%20If%20the%20path%20being%20set%20is%20a%20path%0A%20%20%20%20%20%20%20*%20%20%20notification%20of%20an%20already%20changed%20value%2C%20as%20opposed%20to%20a%20request%0A%20%20%20%20%20%20%20*%20%20%20to%20set%20and%20notify%20the%20change.%20%20In%20the%20latter%20%60false%60%20case%2C%20a%20dirty%0A%20%20%20%20%20%20%20*%20%20%20check%20is%20performed%20and%20then%20the%20value%20is%20set%20to%20the%20path%20before%0A%20%20%20%20%20%20%20*%20%20%20enqueuing%20the%20pending%20property%20change.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%2Fpath%20was%20enqueued%20in%0A%20%20%20%20%20%20%20*%20%20%20the%20pending%20changes%20bag.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingPropertyOrPath'%2Cvalue%3Afunction%20_setPendingPropertyOrPath(path%2Cvalue%2CshouldNotify%2CisPathNotification)%7Bif(isPathNotification%7C%7CPolymer.Path.root(Array.isArray(path)%3Fpath%5B0%5D%3Apath)!%3D%3Dpath)%7B%2F%2F%20Dirty%20check%20changes%20being%20set%20to%20a%20path%20against%20the%20actual%20object%2C%0A%2F%2F%20since%20this%20is%20the%20entry%20point%20for%20paths%20into%20the%20system%3B%20from%20here%0A%2F%2F%20the%20only%20dirty%20checks%20are%20against%20the%20%60__dataTemp%60%20cache%20to%20prevent%0A%2F%2F%20duplicate%20work%20in%20the%20same%20turn%20only.%20Note%2C%20if%20this%20was%20a%20notification%0A%2F%2F%20of%20a%20change%20already%20set%20to%20a%20path%20(isPathNotification%3A%20true)%2C%0A%2F%2F%20we%20always%20let%20the%20change%20through%20and%20skip%20the%20%60set%60%20since%20it%20was%0A%2F%2F%20already%20dirty%20checked%20at%20the%20point%20of%20entry%20and%20the%20underlying%0A%2F%2F%20object%20has%20already%20been%20updated%0Aif(!isPathNotification)%7Bvar%20old%3DPolymer.Path.get(this%2Cpath)%3Bpath%3D%2F**%20%40type%20%7Bstring%7D%20*%2FPolymer.Path.set(this%2Cpath%2Cvalue)%3B%2F%2F%20Use%20property-accessor's%20simpler%20dirty%20check%0Aif(!path%7C%7C!_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_shouldPropertyChange'%2Cthis).call(this%2Cpath%2Cvalue%2Cold))%7Breturn%20false%3B%7D%7Dthis.__dataHasPaths%3Dtrue%3Bif(this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify))%7BcomputeLinkedPaths(this%2Cpath%2Cvalue)%3Breturn%20true%3B%7D%7Delse%7Bif(this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bpath%5D)%7Breturn%20this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify)%3B%7Delse%7Bthis%5Bpath%5D%3Dvalue%3B%7D%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Applies%20a%20value%20to%20a%20non-Polymer%20element%2Fnode's%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20implementation%20makes%20a%20best-effort%20at%20binding%20interop%3A%0A%20%20%20%20%20%20%20*%20Some%20native%20element%20properties%20have%20side-effects%20when%0A%20%20%20%20%20%20%20*%20re-setting%20the%20same%20value%20(e.g.%20setting%20%60%3Cinput%3E.value%60%20resets%20the%0A%20%20%20%20%20%20%20*%20cursor%20position)%2C%20so%20we%20do%20a%20dirty-check%20before%20setting%20the%20value.%0A%20%20%20%20%20%20%20*%20However%2C%20for%20better%20interop%20with%20non-Polymer%20custom%20elements%20that%0A%20%20%20%20%20%20%20*%20accept%20objects%2C%20we%20explicitly%20re-set%20object%20changes%20coming%20from%20the%0A%20%20%20%20%20%20%20*%20Polymer%20world%20(which%20may%20include%20deep%20object%20changes%20without%20the%0A%20%20%20%20%20%20%20*%20top%20reference%20changing)%2C%20erring%20on%20the%20side%20of%20providing%20more%0A%20%20%20%20%20%20%20*%20information.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20provide%20alternate%20approaches.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7B%2F%2F%20It%20is%20a%20judgment%20call%20that%20resetting%20primitives%20is%0A%2F%2F%20%22bad%22%20and%20resettings%20objects%20is%20also%20%22good%22%3B%20alternatively%20we%20could%0A%2F%2F%20implement%20a%20whitelist%20of%20tag%20%26%20property%20values%20that%20should%20never%0A%2F%2F%20be%20reset%20(e.g.%20%3Cinput%3E.value%20%26%26%20%3Cselect%3E.value)%0Aif(value!%3D%3Dnode%5Bprop%5D%7C%7C(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D'object')%7Bnode%5Bprop%5D%3Dvalue%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20%60PropertiesChanged%60%20implementation%20to%20introduce%20special%0A%20%20%20%20%20%20%20*%20dirty%20check%20logic%20depending%20on%20the%20property%20%26%20value%20being%20set%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20Any%20value%20set%20to%20a%20path%20(e.g.%20'obj.prop'%3A%2042%20or%20'obj.prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%2C%20dirty%20checked%20against%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%202.%20Object%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%20and%20%60__data%60%2C%20dirty%20checked%20against%0A%20%20%20%20%20%20%20*%20%20%20%20%60__dataTemp%60%20by%20default%20implementation%20of%20%60_shouldPropertyChange%60%0A%20%20%20%20%20%20%20*%203.%20Primitive%20value%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%2042)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__data%60%2C%20dirty%20checked%20against%20%60__data%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20dirty-check%20is%20important%20to%20prevent%20cycles%20due%20to%20two-way%0A%20%20%20%20%20%20%20*%20notification%2C%20but%20paths%20and%20objects%20are%20only%20dirty%20checked%20against%20any%0A%20%20%20%20%20%20%20*%20previous%20value%20set%20during%20this%20turn%20via%20a%20%22temporary%20cache%22%20that%20is%0A%20%20%20%20%20%20%20*%20cleared%20when%20the%20last%20%60_propertiesChanged%60%20exits.%20This%20is%20so%3A%0A%20%20%20%20%20%20%20*%20a.%20any%20cached%20array%20paths%20(e.g.%20'array.3.prop')%20may%20be%20invalidated%0A%20%20%20%20%20%20%20*%20%20%20%20due%20to%20array%20mutations%20like%20shift%2Funshift%2Fsplice%3B%20this%20is%20fine%0A%20%20%20%20%20%20%20*%20%20%20%20since%20path%20changes%20are%20dirty-checked%20at%20user%20entry%20points%20like%20%60set%60%0A%20%20%20%20%20%20%20*%20b.%20dirty-checking%20for%20objects%20only%20lasts%20one%20turn%20to%20allow%20the%20user%0A%20%20%20%20%20%20%20*%20%20%20%20to%20mutate%20the%20object%20in-place%20and%20re-set%20it%20with%20the%20same%20identity%0A%20%20%20%20%20%20%20*%20%20%20%20and%20have%20all%20sub-properties%20re-propagated%20in%20a%20subsequent%20turn.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20temp%20cache%20is%20not%20necessarily%20sufficient%20to%20prevent%20invalid%20array%0A%20%20%20%20%20%20%20*%20paths%2C%20since%20a%20splice%20can%20happen%20during%20the%20same%20turn%20(with%20pathological%0A%20%20%20%20%20%20%20*%20user%20code)%3B%20we%20could%20introduce%20a%20%22fixup%22%20for%20temporarily%20cached%20array%0A%20%20%20%20%20%20%20*%20paths%20if%20needed%3A%20https%3A%2F%2Fgithub.com%2FPolymer%2Fpolymer%2Fissues%2F4227%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20True%20if%20property%20should%20fire%20notification%0A%20%20%20%20%20%20%20*%20%20%20event%20(applies%20only%20for%20%60notify%3A%20true%60%20properties)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2CshouldNotify)%7Bvar%20isPath%3Dthis.__dataHasPaths%26%26Polymer.Path.isPath(property)%3Bvar%20prevProps%3DisPath%3Fthis.__dataTemp%3Athis.__data%3Bif(this._shouldPropertyChange(property%2Cvalue%2CprevProps%5Bproperty%5D))%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dthis.__data%5Bproperty%5D%3B%7D%2F%2F%20Paths%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%20turn)%2C%0A%2F%2F%20which%20is%20used%20for%20dirty-checking%2C%20all%20others%20stored%20in%20__data%0Aif(isPath)%7Bthis.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Delse%7Bthis.__data%5Bproperty%5D%3Dvalue%3B%7D%2F%2F%20All%20changes%20go%20into%20pending%20property%20bag%2C%20passed%20to%20_propertiesChanged%0Athis.__dataPending%5Bproperty%5D%3Dvalue%3B%2F%2F%20Track%20properties%20that%20should%20notify%20separately%0Aif(isPath%7C%7Cthis%5BTYPES.NOTIFY%5D%26%26this%5BTYPES.NOTIFY%5D%5Bproperty%5D)%7Bthis.__dataToNotify%3Dthis.__dataToNotify%7C%7C%7B%7D%3Bthis.__dataToNotify%5Bproperty%5D%3DshouldNotify%3B%7Dreturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20base%20implementation%20to%20ensure%20all%20accessors%20set%20%60shouldNotify%60%0A%20%20%20%20%20%20%20*%20to%20true%2C%20for%20per-property%20notification%20tracking.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessor%60's%20default%20async%20queuing%20of%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%3A%20if%20%60__dataReady%60%20is%20false%20(has%20not%20yet%20been%0A%20%20%20%20%20%20%20*%20manually%20flushed)%2C%20the%20function%20no-ops%3B%20otherwise%20flushes%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20synchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bif(this.__dataReady)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20the%20given%20client%20on%20a%20list%20of%20pending%20clients%2C%20whose%0A%20%20%20%20%20%20%20*%20pending%20property%20changes%20can%20later%20be%20flushed%20via%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60_flushClients%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20client%20PropertyEffects%20client%20to%20enqueue%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enqueueClient'%2Cvalue%3Afunction%20_enqueueClient(client)%7Bthis.__dataPendingClients%3Dthis.__dataPendingClients%7C%7C%5B%5D%3Bif(client!%3D%3Dthis)%7Bthis.__dataPendingClients.push(client)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20superclass%20implementation.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bthis.__dataCounter%2B%2B%3B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_flushProperties'%2Cthis).call(this)%3Bthis.__dataCounter--%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Flushes%20any%20clients%20previously%20enqueued%20via%20%60_enqueueClient%60%2C%20causing%0A%20%20%20%20%20%20%20*%20their%20%60_flushProperties%60%20method%20to%20run.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushClients'%2Cvalue%3Afunction%20_flushClients()%7Bif(!this.__dataClientsReady)%7Bthis.__dataClientsReady%3Dtrue%3Bthis._readyClients()%3B%2F%2F%20Override%20point%20where%20accessors%20are%20turned%20on%3B%20importantly%2C%0A%2F%2F%20this%20is%20after%20clients%20have%20fully%20readied%2C%20providing%20a%20guarantee%0A%2F%2F%20that%20any%20property%20effects%20occur%20only%20after%20all%20clients%20are%20ready.%0Athis.__dataReady%3Dtrue%3B%7Delse%7Bthis.__enableOrFlushClients()%3B%7D%7D%2F%2F%20NOTE%3A%20We%20ensure%20clients%20either%20enable%20or%20flush%20as%20appropriate.%20This%0A%2F%2F%20handles%20two%20corner%20cases%3A%0A%2F%2F%20(1)%20clients%20flush%20properly%20when%20connected%2Fenabled%20before%20the%20host%0A%2F%2F%20enables%3B%20e.g.%0A%2F%2F%20%20%20(a)%20Templatize%20stamps%20with%20no%20properties%20and%20does%20not%20flush%20and%0A%2F%2F%20%20%20(b)%20the%20instance%20is%20inserted%20into%20dom%20and%0A%2F%2F%20%20%20(c)%20then%20the%20instance%20flushes.%0A%2F%2F%20(2)%20clients%20enable%20properly%20when%20not%20connected%2Fenabled%20when%20the%20host%0A%2F%2F%20flushes%3B%20e.g.%0A%2F%2F%20%20%20(a)%20a%20template%20is%20runtime%20stamped%20and%20not%20yet%20connected%2Fenabled%0A%2F%2F%20%20%20(b)%20a%20host%20sets%20a%20property%2C%20causing%20stamped%20dom%20to%20flush%0A%2F%2F%20%20%20(c)%20the%20stamped%20dom%20enables.%0A%7D%2C%7Bkey%3A'__enableOrFlushClients'%2Cvalue%3Afunction%20__enableOrFlushClients()%7Bvar%20clients%3Dthis.__dataPendingClients%3Bif(clients)%7Bthis.__dataPendingClients%3Dnull%3Bfor(var%20i%3D0%3Bi%3Cclients.length%3Bi%2B%2B)%7Bvar%20client%3Dclients%5Bi%5D%3Bif(!client.__dataEnabled)%7Bclient._enableProperties()%3B%7Delse%20if(client.__dataPending)%7Bclient._flushProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Perform%20any%20initial%20setup%20on%20client%20dom.%20Called%20before%20the%20first%0A%20%20%20%20%20%20%20*%20%60_flushProperties%60%20call%20on%20client%20dom%20and%20before%20any%20element%0A%20%20%20%20%20%20%20*%20observers%20are%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bthis.__enableOrFlushClients()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20bag%20of%20property%20changes%20to%20this%20instance%2C%20and%0A%20%20%20%20%20%20%20*%20synchronously%20processes%20all%20effects%20of%20the%20properties%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Property%20names%20must%20be%20simple%20properties%2C%20not%20paths.%20%20Batched%0A%20%20%20%20%20%20%20*%20path%20propagation%20is%20not%20supported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20one%20or%20more%20key-value%20pairs%20whose%20key%20is%0A%20%20%20%20%20%20%20*%20%20%20a%20property%20and%20value%20is%20the%20new%20value%20to%20set%20for%20that%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setReadOnly%20When%20true%2C%20any%20private%20values%20set%20in%0A%20%20%20%20%20%20%20*%20%20%20%60props%60%20will%20be%20set.%20By%20default%2C%20%60setProperties%60%20will%20not%20set%0A%20%20%20%20%20%20%20*%20%20%20%60readOnly%3A%20true%60%20root%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setProperties'%2Cvalue%3Afunction%20setProperties(props%2CsetReadOnly)%7Bfor(var%20path%20in%20props)%7Bif(setReadOnly%7C%7C!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5Bpath%5D)%7B%2F%2FTODO(kschaaf)%3A%20explicitly%20disallow%20paths%20in%20setProperty%3F%0A%2F%2F%20wildcard%20observers%20currently%20only%20pass%20the%20first%20changed%20path%0A%2F%2F%20in%20the%20%60info%60%20object%2C%20and%20you%20could%20do%20some%20odd%20things%20batching%0A%2F%2F%20paths%2C%20e.g.%20%7B'foo.bar'%3A%20%7B...%7D%2C%20'foo'%3A%20null%7D%0Athis._setPendingPropertyOrPath(path%2Cprops%5Bpath%5D%2Ctrue)%3B%7D%7Dthis._invalidateProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20so%20that%20property%20accessor%0A%20%20%20%20%20%20%20*%20side%20effects%20are%20not%20enabled%20until%20after%20client%20dom%20is%20fully%20ready.%0A%20%20%20%20%20%20%20*%20Also%20calls%20%60_flushClients%60%20callback%20to%20ensure%20client%20dom%20is%20enabled%0A%20%20%20%20%20%20%20*%20that%20was%20not%20enabled%20as%20a%20result%20of%20flushing%20properties.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B%2F%2F%20It%20is%20important%20that%20%60super.ready()%60%20is%20not%20called%20here%20as%20it%0A%2F%2F%20immediately%20turns%20on%20accessors.%20Instead%2C%20we%20wait%20until%20%60readyClients%60%0A%2F%2F%20to%20enable%20accessors%20to%20provide%20a%20guarantee%20that%20clients%20are%20ready%0A%2F%2F%20before%20processing%20any%20accessors%20side%20effects.%0Athis._flushProperties()%3B%2F%2F%20If%20no%20data%20was%20pending%2C%20%60_flushProperties%60%20will%20not%20%60flushClients%60%0A%2F%2F%20so%20ensure%20this%20is%20done.%0Aif(!this.__dataClientsReady)%7Bthis._flushClients()%3B%7D%2F%2F%20Before%20ready%2C%20client%20notifications%20do%20not%20trigger%20_flushProperties.%0A%2F%2F%20Therefore%20a%20flush%20is%20necessary%20here%20if%20data%20has%20been%20set.%0Aif(this.__dataPending)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyAccessors%60's%20properties%20changed%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Runs%20each%20class%20of%20effects%20for%20the%20batch%20of%20changed%20properties%20in%0A%20%20%20%20%20%20%20*%20a%20specific%20order%20(compute%2C%20propagate%2C%20reflect%2C%20observe%2C%20notify).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20----------------------------%0A%2F%2F%20let%20c%20%3D%20Object.getOwnPropertyNames(changedProps%20%7C%7C%20%7B%7D)%3B%0A%2F%2F%20window.debug%20%26%26%20console.group(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20if%20(window.debug)%20%7B%20debugger%3B%20%7D%0A%2F%2F%20----------------------------%0Avar%20hasPaths%3Dthis.__dataHasPaths%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20Compute%20properties%0ArunComputedEffects(this%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Clear%20notify%20properties%20prior%20to%20possible%20reentry%20(propagate%2C%20observe)%2C%0A%2F%2F%20but%20after%20computing%20effects%20have%20a%20chance%20to%20add%20to%20them%0Avar%20notifyProps%3Dthis.__dataToNotify%3Bthis.__dataToNotify%3Dnull%3B%2F%2F%20Propagate%20properties%20to%20clients%0Athis._propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Flush%20clients%0Athis._flushClients()%3B%2F%2F%20Reflect%20properties%0ArunEffects(this%2Cthis%5BTYPES.REFLECT%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Observe%20properties%0ArunEffects(this%2Cthis%5BTYPES.OBSERVE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Notify%20properties%20to%20host%0Aif(notifyProps)%7BrunNotifyEffects(this%2CnotifyProps%2CchangedProps%2ColdProps%2ChasPaths)%3B%7D%2F%2F%20Clear%20temporary%20cache%20at%20end%20of%20turn%0Aif(this.__dataCounter%3D%3D1)%7Bthis.__dataTemp%3D%7B%7D%3B%7D%2F%2F%20----------------------------%0A%2F%2F%20window.debug%20%26%26%20console.groupEnd(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20----------------------------%0A%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20propagate%20any%20property%20changes%20to%20stamped%20template%20nodes%0A%20%20%20%20%20%20%20*%20managed%20by%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propagatePropertyChanges'%2Cvalue%3Afunction%20_propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%7Bif(this%5BTYPES.PROPAGATE%5D)%7BrunEffects(this%2Cthis%5BTYPES.PROPAGATE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%7Dvar%20templateInfo%3Dthis.__templateInfo%3Bwhile(templateInfo)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2CchangedProps%2ColdProps%2ChasPaths%2CtemplateInfo.nodeList)%3BtemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Aliases%20one%20data%20path%20as%20another%2C%20such%20that%20path%20notifications%20from%20one%0A%20%20%20%20%20%20%20*%20are%20routed%20to%20the%20other.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20to%20Target%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20from%20Source%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'linkPaths'%2Cvalue%3Afunction%20linkPaths(to%2Cfrom)%7Bto%3DPolymer.Path.normalize(to)%3Bfrom%3DPolymer.Path.normalize(from)%3Bthis.__dataLinkedPaths%3Dthis.__dataLinkedPaths%7C%7C%7B%7D%3Bthis.__dataLinkedPaths%5Bto%5D%3Dfrom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20a%20data%20path%20alias%20previously%20established%20with%20%60_linkPaths%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20the%20path%20to%20unlink%20should%20be%20the%20target%20(%60to%60)%20used%20when%0A%20%20%20%20%20%20%20*%20linking%20the%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Target%20path%20to%20unlink.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlinkPaths'%2Cvalue%3Afunction%20unlinkPaths(path)%7Bpath%3DPolymer.Path.normalize(path)%3Bif(this.__dataLinkedPaths)%7Bdelete%20this.__dataLinkedPaths%5Bpath%5D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20an%20array%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items%20%3D%20%5B%20%7Bname%3A%20'Jim'%7D%2C%20%7Bname%3A%20'Todd'%7D%2C%20%7Bname%3A%20'Bill'%7D%20%5D%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.splice(1%2C%201%2C%20%7Bname%3A%20'Sam'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.push(%7Bname%3A%20'Bob'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifySplices('items'%2C%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%201%2C%20removed%3A%20%5B%7Bname%3A%20'Todd'%7D%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%203%2C%20removed%3A%20%5B%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D)%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%20indicating%20ordered%0A%20%20%20%20%20%20%20*%20%20%20changes%20that%20occurred%20to%20the%20array.%20Each%20record%20should%20have%20the%0A%20%20%20%20%20%20%20*%20%20%20following%20fields%3A%0A%20%20%20%20%20%20%20*%20%20%20%20*%20index%3A%20index%20at%20which%20the%20change%20occurred%0A%20%20%20%20%20%20%20*%20%20%20%20*%20removed%3A%20array%20of%20items%20that%20were%20removed%20from%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20addedCount%3A%20number%20of%20new%20items%20added%20at%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20object%3A%20a%20reference%20to%20the%20array%20in%20question%0A%20%20%20%20%20%20%20*%20%20%20%20*%20type%3A%20the%20string%20literal%20'splice'%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20Note%20that%20splice%20records%20_must_%20be%20normalized%20such%20that%20they%20are%0A%20%20%20%20%20%20%20*%20%20%20reported%20in%20index%20order%20(raw%20results%20from%20%60Object.observe%60%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20ordered%20and%20must%20be%20normalized%2Fmerged%20before%20notifying).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifySplices'%2Cvalue%3Afunction%20notifySplices(path%2Csplices)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B_notifySplices(this%2Carray%2Cinfo.path%2Csplices)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20reading%20a%20value%20from%20a%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20is%20undefined%2C%20this%20method%20returns%0A%20%20%20%20%20%20%20*%20%60undefined%60%20(this%20method%20does%20not%20throw%20when%20dereferencing%20undefined%0A%20%20%20%20%20%20%20*%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20read.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60foo.bar.baz%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60users.12.name%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20the%20path%2C%20or%20%60undefined%60%20if%20any%20part%20of%20the%20path%0A%20%20%20%20%20%20%20*%20%20%20is%20undefined.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'get'%2Cvalue%3Afunction%20get(path%2Croot)%7Breturn%20Polymer.Path.get(root%7C%7Cthis%2Cpath)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20setting%20a%20value%20to%20a%20path%20and%20notifying%20any%0A%20%20%20%20%20%20%20*%20elements%20bound%20to%20the%20same%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20except%20for%20the%20last%20is%20undefined%2C%0A%20%20%20%20%20%20%20*%20this%20method%20does%20nothing%20(this%20method%20does%20not%20throw%20when%0A%20%20%20%20%20%20%20*%20dereferencing%20undefined%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20write.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60'foo.bar.baz'%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60'users.12.name'%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20at%20the%20specified%20path.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%20%20When%20specified%2C%20no%20notification%20will%20occur.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'set'%2Cvalue%3Afunction%20set(path%2Cvalue%2Croot)%7Bif(root)%7BPolymer.Path.set(root%2Cpath%2Cvalue)%3B%7Delse%7Bif(!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5B%2F**%20%40type%20%7Bstring%7D%20*%2Fpath%5D)%7Bif(this._setPendingPropertyOrPath(path%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20end%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20push%20onto%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'push'%2Cvalue%3Afunction%20push(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20len%3Darray.length%3Bfor(var%20_len%3Darguments.length%2Citems%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bitems%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dvar%20ret%3Darray.push.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Clen%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20end%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'pop'%2Cvalue%3Afunction%20pop(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.pop()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2Carray.length%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Starting%20from%20the%20start%20index%20specified%2C%20removes%200%20or%20more%20items%0A%20%20%20%20%20%20%20*%20from%20the%20array%20and%20inserts%200%20or%20more%20new%20items%20in%20their%20place.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.splice%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20start%20Index%20from%20which%20to%20start%20removing%2Finserting.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20deleteCount%20Number%20of%20items%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20into%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20of%20removed%20items.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'splice'%2Cvalue%3Afunction%20splice(path%2Cstart%2CdeleteCount)%7Bfor(var%20_len2%3Darguments.length%2Citems%3DArray(_len2%3E3%3F_len2-3%3A0)%2C_key2%3D3%3B_key2%3C_len2%3B_key2%2B%2B)%7Bitems%5B_key2-3%5D%3Darguments%5B_key2%5D%3B%7Dvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B%2F%2F%20Normalize%20fancy%20native%20splice%20handling%20of%20crazy%20start%20values%0Aif(start%3C0)%7Bstart%3Darray.length-Math.floor(-start)%3B%7Delse%20if(start)%7Bstart%3DMath.floor(start)%3B%7D%2F%2F%20array.splice%20does%20different%20things%20based%20on%20the%20number%20of%20arguments%0A%2F%2F%20you%20pass%20in.%20Therefore%2C%20array.splice(0)%20and%20array.splice(0%2C%20undefined)%0A%2F%2F%20do%20different%20things.%20In%20the%20former%2C%20the%20whole%20array%20is%20cleared.%20In%20the%0A%2F%2F%20latter%2C%20no%20items%20are%20removed.%0A%2F%2F%20This%20means%20that%20we%20need%20to%20detect%20whether%201.%20one%20of%20the%20arguments%0A%2F%2F%20is%20actually%20passed%20in%20and%20then%202.%20determine%20how%20many%20arguments%0A%2F%2F%20we%20should%20pass%20on%20to%20the%20native%20array.splice%0A%2F%2F%0Avar%20ret%3Dvoid%200%3B%2F%2F%20Omit%20any%20additional%20arguments%20if%20they%20were%20not%20passed%20in%0Aif(arguments.length%3D%3D%3D2)%7Bret%3Darray.splice(start)%3B%2F%2F%20Either%20start%20was%20undefined%20and%20the%20others%20were%20defined%2C%20but%20in%20this%0A%2F%2F%20case%20we%20can%20safely%20pass%20on%20all%20arguments%0A%2F%2F%0A%2F%2F%20Note%3A%20this%20includes%20the%20case%20where%20none%20of%20the%20arguments%20were%20passed%20in%2C%0A%2F%2F%20e.g.%20this.splice('array').%20However%2C%20if%20both%20start%20and%20deleteCount%0A%2F%2F%20are%20undefined%2C%20array.splice%20will%20not%20modify%20the%20array%20(as%20expected)%0A%7Delse%7Bret%3Darray.splice.apply(array%2C%5Bstart%2CdeleteCount%5D.concat(items))%3B%7D%2F%2F%20At%20the%20end%2C%20check%20whether%20any%20items%20were%20passed%20in%20(e.g.%20insertions)%0A%2F%2F%20or%20if%20the%20return%20array%20contains%20items%20(e.g.%20deletions).%0A%2F%2F%20Only%20notify%20if%20items%20were%20added%20or%20deleted.%0Aif(items.length%7C%7Cret.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Cstart%2Citems.length%2Cret)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20beginning%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'shift'%2Cvalue%3Afunction%20shift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.shift()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20beginning%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20info%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unshift'%2Cvalue%3Afunction%20unshift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bfor(var%20_len3%3Darguments.length%2Citems%3DArray(_len3%3E1%3F_len3-1%3A0)%2C_key3%3D1%3B_key3%3C_len3%3B_key3%2B%2B)%7Bitems%5B_key3-1%5D%3Darguments%5B_key3%5D%3B%7Dvar%20ret%3Darray.unshift.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20a%20path%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.item.user.name%20%3D%20'Bob'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifyPath('item.user.name')%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Value%20at%20the%20path%20(optional).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyPath'%2Cvalue%3Afunction%20notifyPath(path%2Cvalue)%7B%2F**%20%40type%20%7Bstring%7D%20*%2Fvar%20propPath%3Dvoid%200%3Bif(arguments.length%3D%3D1)%7B%2F%2F%20Get%20value%20if%20not%20supplied%0Avar%20info%3D%7Bpath%3A''%7D%3Bvalue%3DPolymer.Path.get(this%2Cpath%2Cinfo)%3BpropPath%3Dinfo.path%3B%7Delse%20if(Array.isArray(path))%7B%2F%2F%20Normalize%20path%20if%20needed%0ApropPath%3DPolymer.Path.normalize(path)%3B%7Delse%7BpropPath%3D%2F**%20%40type%7Bstring%7D%20*%2Fpath%3B%7Dif(this._setPendingPropertyOrPath(propPath%2Cvalue%2Ctrue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReadOnlyProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReadOnlyProperty'%2Cvalue%3Afunction%20_createReadOnlyProperty(property%2CprotectedSetter)%7Bthis._addPropertyEffect(property%2CTYPES.READ_ONLY)%3Bif(protectedSetter)%7Bthis%5B'_set'%2Bupper(property)%5D%3D%2F**%20%40this%20%7BPropertyEffects%7D%20*%2Ffunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createPropertyObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createPropertyObserver'%2Cvalue%3Afunction%20_createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bvar%20info%3D%7Bproperty%3Aproperty%2Cmethod%3Amethod%2CdynamicFn%3ABoolean(dynamicFn)%7D%3Bthis._addPropertyEffect(property%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Aproperty%7D%7D)%3Bif(dynamicFn)%7Bthis._addPropertyEffect(%2F**%20%40type%20%7Bstring%7D%20*%2Fmethod%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Amethod%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createMethodObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createMethodObserver'%2Cvalue%3Afunction%20_createMethodObserver(expression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20observer%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.OBSERVE%2CrunMethodEffect%2Cnull%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createNotifyingProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createNotifyingProperty'%2Cvalue%3Afunction%20_createNotifyingProperty(property)%7Bthis._addPropertyEffect(property%2CTYPES.NOTIFY%2C%7Bfn%3ArunNotifyEffect%2Cinfo%3A%7BeventName%3ACaseMap.camelToDashCase(property)%2B'-changed'%2Cproperty%3Aproperty%7D%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReflectedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReflectedProperty'%2Cvalue%3Afunction%20_createReflectedProperty(property)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bif(attr%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Property%20'%2Bproperty%2B'%20cannot%20be%20reflected%20to%20attribute%20'%2Battr%2B'%20because%20%22-%22%20is%20not%20a%20valid%20starting%20attribute%20name.%20Use%20a%20lowercase%20first%20letter%20for%20the%20property%20instead.')%3B%7Delse%7Bthis._addPropertyEffect(property%2CTYPES.REFLECT%2C%7Bfn%3ArunReflectEffect%2Cinfo%3A%7BattrName%3Aattr%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createComputedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createComputedProperty'%2Cvalue%3Afunction%20_createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20computed%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.COMPUTE%2CrunComputedEffect%2Cproperty%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20the%20argument%20values%20for%20a%20method%20specified%20in%20the%20provided%20array%0A%20%20%20%20%20%20%20*%20of%20argument%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60path%60%20and%20%60value%60%20arguments%20are%20used%20to%20fill%20in%20wildcard%20descriptor%0A%20%20%20%20%20%20%20*%20when%20the%20method%20is%20being%20called%20as%20a%20result%20of%20a%20path%20notification.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Array%3C!MethodArg%3E%7D%20args%20Array%20of%20argument%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20name%20that%20triggered%20the%20method%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C*%3E%7D%20Array%20of%20argument%20values%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_marshalArgs'%2Cvalue%3Afunction%20_marshalArgs(args%2Cpath%2Cprops)%7Bvar%20data%3Dthis.__data%3Bvar%20values%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dargs.length%3Bi%3Cl%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bvar%20name%3Darg.name%3Bvar%20v%3Dvoid%200%3Bif(arg.literal)%7Bv%3Darg.value%3B%7Delse%7Bif(arg.structured)%7Bv%3DPolymer.Path.get(data%2Cname)%3B%2F%2F%20when%20data%20is%20not%20stored%20e.g.%20%60splices%60%0Aif(v%3D%3D%3Dundefined)%7Bv%3Dprops%5Bname%5D%3B%7D%7Delse%7Bv%3Ddata%5Bname%5D%3B%7D%7Dif(arg.wildcard)%7B%2F%2F%20Only%20send%20the%20actual%20path%20changed%20info%20if%20the%20change%20that%0A%2F%2F%20caused%20the%20observer%20to%20run%20matched%20the%20wildcard%0Avar%20baseChanged%3Dname.indexOf(path%2B'.')%3D%3D%3D0%3Bvar%20matches%3Dpath.indexOf(name)%3D%3D%3D0%26%26!baseChanged%3Bvalues%5Bi%5D%3D%7Bpath%3Amatches%3Fpath%3Aname%2Cvalue%3Amatches%3Fprops%5Bpath%5D%3Av%2Cbase%3Av%7D%3B%7Delse%7Bvalues%5Bi%5D%3Dv%3B%7D%7Dreturn%20values%3B%7D%2F%2F%20--%20static%20class%20methods%20------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20accessor%20exists%20for%20the%20specified%20property%2C%20and%20adds%0A%20%20%20%20%20%20%20*%20to%20a%20list%20of%20%22property%20effects%22%20that%20will%20run%20when%20the%20accessor%20for%0A%20%20%20%20%20%20%20*%20the%20specified%20property%20is%20set.%20%20Effects%20are%20grouped%20by%20%22type%22%2C%20which%0A%20%20%20%20%20%20%20*%20roughly%20corresponds%20to%20a%20phase%20in%20effect%20processing.%20%20The%20effect%0A%20%20%20%20%20%20%20*%20metadata%20should%20be%20in%20the%20following%20form%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20fn%3A%20effectFunction%2C%20%2F%2F%20Reference%20to%20function%20to%20call%20to%20perform%20effect%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20info%3A%20%7B%20...%20%7D%20%20%20%20%20%20%20%2F%2F%20Effect%20metadata%20passed%20to%20function%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20trigger%3A%20%7B%20%20%20%20%20%20%20%20%20%20%2F%2F%20Optional%20triggering%20metadata%3B%20if%20not%20provided%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20name%3A%20string%20%20%20%20%20%20%2F%2F%20the%20property%20is%20treated%20as%20a%20wildcard%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20structured%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20wildcard%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effects%20are%20called%20from%20%60_propertiesChanged%60%20in%20the%20following%20order%20by%0A%20%20%20%20%20%20%20*%20type%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20COMPUTE%0A%20%20%20%20%20%20%20*%202.%20PROPAGATE%0A%20%20%20%20%20%20%20*%203.%20REFLECT%0A%20%20%20%20%20%20%20*%204.%20OBSERVE%0A%20%20%20%20%20%20%20*%205.%20NOTIFY%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effect%20functions%20are%20called%20with%20the%20following%20signature%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20effectFunction(inst%2C%20path%2C%20props%2C%20oldProps%2C%20info%2C%20hasPaths)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_bindTemplate'%2C%2F%2F%20--%20binding%20----------------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60bindTemplate%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20the%20prototype%20(for%20prototypical%20template%0A%20%20%20%20%20%20%20*%20binding%2C%20to%20avoid%20creating%20accessors%20every%20instance)%20once%20per%20prototype%2C%0A%20%20%20%20%20%20%20*%20and%20will%20be%20called%20with%20%60runtimeBinding%3A%20true%60%20by%20%60_stampTemplate%60%20to%0A%20%20%20%20%20%20%20*%20create%20and%20link%20an%20instance%20of%20the%20template%20metadata%20associated%20with%20a%0A%20%20%20%20%20%20%20*%20particular%20stamping.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20instanceBinding%20When%20false%20(default)%2C%20performs%0A%20%20%20%20%20%20%20*%20%20%20%22prototypical%22%20binding%20of%20the%20template%20and%20overwrites%20any%20previously%0A%20%20%20%20%20%20%20*%20%20%20bound%20template%20for%20the%20class.%20When%20true%20(as%20passed%20from%0A%20%20%20%20%20%20%20*%20%20%20%60_stampTemplate%60)%2C%20the%20template%20info%20is%20instanced%20and%20linked%20into%0A%20%20%20%20%20%20%20*%20%20%20the%20list%20of%20bound%20templates.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%3B%20for%20%60runtimeBinding%60%2C%0A%20%20%20%20%20%20%20*%20%20%20this%20is%20an%20instance%20of%20the%20prototypical%20template%20info%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_bindTemplate(template%2CinstanceBinding)%7Bvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20wasPreBound%3Dthis.__templateInfo%3D%3DtemplateInfo%3B%2F%2F%20Optimization%3A%20since%20this%20is%20called%20twice%20for%20proto-bound%20templates%2C%0A%2F%2F%20don't%20attempt%20to%20recreate%20accessors%20if%20this%20template%20was%20pre-bound%0Aif(!wasPreBound)%7Bfor(var%20prop%20in%20templateInfo.propertyEffects)%7Bthis._createPropertyAccessor(prop)%3B%7D%7Dif(instanceBinding)%7B%2F%2F%20For%20instance-time%20binding%2C%20create%20instance%20of%20template%20metadata%0A%2F%2F%20and%20link%20into%20list%20of%20templates%20if%20necessary%0AtemplateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2FObject.create(templateInfo)%3BtemplateInfo.wasPreBound%3DwasPreBound%3Bif(!wasPreBound%26%26this.__templateInfo)%7Bvar%20last%3Dthis.__templateInfoLast%7C%7Cthis.__templateInfo%3Bthis.__templateInfoLast%3Dlast.nextTemplateInfo%3DtemplateInfo%3BtemplateInfo.previousTemplateInfo%3Dlast%3Breturn%20templateInfo%3B%7D%7Dreturn%20this.__templateInfo%3DtemplateInfo%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20a%20property%20effect%20to%20the%20given%20template%20metadata%2C%20which%20is%20run%0A%20%20%20%20%20%20%20*%20at%20the%20%22propagate%22%20stage%20of%20%60_propertiesChanged%60%20when%20the%20template%0A%20%20%20%20%20%20%20*%20has%20been%20bound%20to%20the%20element%20via%20%60_bindTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60effect%60%20object%20should%20match%20the%20format%20in%20%60_addPropertyEffect%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Template%20metadata%20to%20add%20effect%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20provided%20template%20and%20performs%20instance-time%20setup%20for%0A%20%20%20%20%20%20%20*%20Polymer%20template%20features%2C%20including%20data%20bindings%2C%20declarative%20event%0A%20%20%20%20%20%20%20*%20listeners%2C%20and%20the%20%60this.%24%60%20map%20of%20%60id%60's%20to%20nodes.%20%20A%20document%20fragment%0A%20%20%20%20%20%20%20*%20is%20returned%20containing%20the%20stamped%20DOM%2C%20ready%20for%20insertion%20into%20the%0A%20%20%20%20%20%20%20*%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20more%20than%20once%3B%20however%20note%20that%20due%20to%0A%20%20%20%20%20%20%20*%20%60shadycss%60%20polyfill%20limitations%2C%20only%20styles%20from%20templates%20prepared%0A%20%20%20%20%20%20%20*%20using%20%60ShadyCSS.prepareTemplate%60%20will%20be%20correctly%20polyfilled%20(scoped%0A%20%20%20%20%20%20%20*%20to%20the%20shadow%20root%20and%20support%20CSS%20custom%20properties)%2C%20and%20note%20that%0A%20%20%20%20%20%20%20*%20%60ShadyCSS.prepareTemplate%60%20may%20only%20be%20called%20once%20per%20element.%20As%20such%2C%0A%20%20%20%20%20%20%20*%20any%20styles%20required%20by%20in%20runtime-stamped%20templates%20must%20be%20included%0A%20%20%20%20%20%20%20*%20in%20the%20main%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Ensures%20that%20created%20dom%20is%20%60_enqueueClient%60'd%20to%20this%20element%20so%0A%2F%2F%20that%20it%20can%20be%20flushed%20on%20next%20call%20to%20%60_flushProperties%60%0AhostStack.beginHosting(this)%3Bvar%20dom%3D_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_stampTemplate'%2Cthis).call(this%2Ctemplate)%3BhostStack.endHosting(this)%3Bvar%20templateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2Fthis._bindTemplate(template%2Ctrue)%3B%2F%2F%20Add%20template-instance-specific%20data%20to%20instanced%20templateInfo%0AtemplateInfo.nodeList%3Ddom.nodeList%3B%2F%2F%20Capture%20child%20nodes%20to%20allow%20unstamping%20of%20non-prototypical%20templates%0Aif(!templateInfo.wasPreBound)%7Bvar%20nodes%3DtemplateInfo.childNodes%3D%5B%5D%3Bfor(var%20n%3Ddom.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bnodes.push(n)%3B%7D%7Ddom.templateInfo%3DtemplateInfo%3B%2F%2F%20Setup%20compound%20storage%2C%202-way%20listeners%2C%20and%20dataHost%20for%20bindings%0AsetupBindings(this%2CtemplateInfo)%3B%2F%2F%20Flush%20properties%20into%20template%20nodes%20if%20already%20booted%0Aif(this.__dataReady)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2Cthis.__data%2Cnull%2Cfalse%2CtemplateInfo.nodeList)%3B%7Dreturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20and%20unbinds%20the%20nodes%20previously%20contained%20in%20the%20provided%0A%20%20%20%20%20%20%20*%20DocumentFragment%20returned%20from%20%60_stampTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!StampedTemplate%7D%20dom%20DocumentFragment%20previously%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60_stampTemplate%60%20associated%20with%20the%20nodes%20to%20be%20removed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeBoundDom'%2Cvalue%3Afunction%20_removeBoundDom(dom)%7B%2F%2F%20Unlink%20template%20info%0Avar%20templateInfo%3Ddom.templateInfo%3Bif(templateInfo.previousTemplateInfo)%7BtemplateInfo.previousTemplateInfo.nextTemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7Dif(templateInfo.nextTemplateInfo)%7BtemplateInfo.nextTemplateInfo.previousTemplateInfo%3DtemplateInfo.previousTemplateInfo%3B%7Dif(this.__templateInfoLast%3D%3DtemplateInfo)%7Bthis.__templateInfoLast%3DtemplateInfo.previousTemplateInfo%3B%7DtemplateInfo.previousTemplateInfo%3DtemplateInfo.nextTemplateInfo%3Dnull%3B%2F%2F%20Remove%20stamped%20nodes%0Avar%20nodes%3DtemplateInfo.childNodes%3Bfor(var%20i%3D0%3Bi%3Cnodes.length%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3Bnode.parentNode.removeChild(node)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20%60TextNode%60's'%20%60textContent%60.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'PROPERTY_EFFECT_TYPES'%2Cget%3Afunction%20get()%7Breturn%20TYPES%3B%7D%7D%5D%2C%5B%7Bkey%3A'addPropertyEffect'%2Cvalue%3Afunction%20addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis.prototype._addPropertyEffect(property%2Ctype%2Ceffect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20single-property%20observer%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createPropertyObserver'%2Cvalue%3Afunction%20createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bthis.prototype._createPropertyObserver(property%2Cmethod%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20multi-property%20%22method%20observer%22%20based%20on%20the%20provided%0A%20%20%20%20%20%20%20*%20expression%2C%20which%20should%20be%20a%20string%20in%20the%20form%20of%20a%20normal%20JavaScript%0A%20%20%20%20%20%20%20*%20function%20signature%3A%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60.%20%20Each%20argument%0A%20%20%20%20%20%20%20*%20should%20correspond%20to%20a%20property%20or%20path%20in%20the%20context%20of%20this%0A%20%20%20%20%20%20%20*%20prototype%20(or%20instance)%2C%20or%20may%20be%20a%20literal%20string%20or%20number.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createMethodObserver'%2Cvalue%3Afunction%20createMethodObserver(expression%2CdynamicFn)%7Bthis.prototype._createMethodObserver(expression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20dispatch%20%60%3Cproperty%3E-changed%60%0A%20%20%20%20%20%20%20*%20events%20to%20notify%20of%20changes%20to%20the%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createNotifyingProperty'%2Cvalue%3Afunction%20createNotifyingProperty(property)%7Bthis.prototype._createNotifyingProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20read-only%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20To%20set%20the%20property%2C%20use%20the%20protected%20%60_setProperty%60%20API.%0A%20%20%20%20%20%20%20*%20To%20create%20a%20custom%20protected%20setter%20(e.g.%20%60_setMyProp()%60%20for%0A%20%20%20%20%20%20%20*%20property%20%60myProp%60)%2C%20pass%20%60true%60%20for%20%60protectedSetter%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20the%20property%20will%20have%20other%20property%20effects%2C%20this%20method%0A%20%20%20%20%20%20%20*%20should%20be%20called%20first%2C%20before%20adding%20other%20effects.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReadOnlyProperty'%2Cvalue%3Afunction%20createReadOnlyProperty(property%2CprotectedSetter)%7Bthis.prototype._createReadOnlyProperty(property%2CprotectedSetter)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20reflect%20the%20property%20value%0A%20%20%20%20%20%20%20*%20to%20a%20(dash-cased)%20attribute%20of%20the%20same%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReflectedProperty'%2Cvalue%3Afunction%20createReflectedProperty(property)%7Bthis.prototype._createReflectedProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20computed%20property%20whose%20value%20is%20set%20to%20the%20result%20of%20the%0A%20%20%20%20%20%20%20*%20method%20described%20by%20the%20given%20%60expression%60%20each%20time%20one%20or%20more%0A%20%20%20%20%20%20%20*%20arguments%20to%20the%20method%20changes.%20%20The%20expression%20should%20be%20a%20string%0A%20%20%20%20%20%20%20*%20in%20the%20form%20of%20a%20normal%20JavaScript%20function%20signature%3A%0A%20%20%20%20%20%20%20*%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20%20%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createComputedProperty'%2Cvalue%3Afunction%20createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bthis.prototype._createComputedProperty(property%2Cexpression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20the%20provided%20template%20to%20ensure%20binding%20effects%20are%20created%0A%20%20%20%20%20%20%20*%20for%20them%2C%20and%20then%20ensures%20property%20accessors%20are%20created%20for%20any%0A%20%20%20%20%20%20%20*%20dependent%20properties%20in%20the%20template.%20%20Binding%20effects%20for%20bound%0A%20%20%20%20%20%20%20*%20templates%20are%20stored%20in%20a%20linked%20list%20on%20the%20instance%20so%20that%0A%20%20%20%20%20%20%20*%20templates%20can%20be%20efficiently%20stamped%20and%20unstamped.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'bindTemplate'%2Cvalue%3Afunction%20bindTemplate(template)%7Breturn%20this.prototype._bindTemplate(template)%3B%7D%7D%2C%7Bkey%3A'_addTemplatePropertyEffect'%2Cvalue%3Afunction%20_addTemplatePropertyEffect(templateInfo%2Cprop%2Ceffect)%7Bvar%20hostProps%3DtemplateInfo.hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3BhostProps%5Bprop%5D%3Dtrue%3Bvar%20effects%3DtemplateInfo.propertyEffects%3DtemplateInfo.propertyEffects%7C%7C%7B%7D%3Bvar%20propEffects%3Deffects%5Bprop%5D%3Deffects%5Bprop%5D%7C%7C%5B%5D%3BpropEffects.push(effect)%3B%7D%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNode'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%20parts%3Dthis._parseBindings(node.textContent%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Initialize%20the%20textContent%20with%20any%20literal%20parts%0A%2F%2F%20NOTE%3A%20default%20to%20a%20space%20here%20so%20the%20textNode%20remains%3B%20some%20browsers%0A%2F%2F%20(IE)%20omit%20an%20empty%20textNode%20following%20cloneNode%2FimportNode.%0Anode.textContent%3DliteralFromParts(parts)%7C%7C'%20'%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'text'%2C'textContent'%2Cparts)%3Bnoted%3Dtrue%3B%7D%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20attributes.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7Bvar%20parts%3Dthis._parseBindings(value%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Attribute%20or%20property%0Avar%20origName%3Dname%3Bvar%20kind%3D'property'%3B%2F%2F%20The%20only%20way%20we%20see%20a%20capital%20letter%20here%20is%20if%20the%20attr%20has%0A%2F%2F%20a%20capital%20letter%20in%20it%20per%20spec.%20In%20this%20case%2C%20to%20make%20sure%0A%2F%2F%20this%20binding%20works%2C%20we%20go%20ahead%20and%20make%20the%20binding%20to%20the%20attribute.%0Aif(capitalAttributeRegex.test(name))%7Bkind%3D'attribute'%3B%7Delse%20if(name%5Bname.length-1%5D%3D%3D'%24')%7Bname%3Dname.slice(0%2C-1)%3Bkind%3D'attribute'%3B%7D%2F%2F%20Initialize%20attribute%20bindings%20with%20any%20literal%20parts%0Avar%20literal%3DliteralFromParts(parts)%3Bif(literal%26%26kind%3D%3D'attribute')%7B%2F%2F%20Ensure%20a%20ShadyCSS%20template%20scoped%20style%20is%20not%20removed%0A%2F%2F%20when%20a%20class%24%20binding's%20initial%20literal%20value%20is%20set.%0Aif(name%3D%3D'class'%26%26node.hasAttribute('class'))%7Bliteral%2B%3D'%20'%2Bnode.getAttribute(name)%3B%7Dnode.setAttribute(name%2Cliteral)%3B%7D%2F%2F%20Clear%20attribute%20before%20removing%2C%20since%20IE%20won't%20allow%20removing%0A%2F%2F%20%60value%60%20attribute%20if%20it%20previously%20had%20a%20value%20(can't%0A%2F%2F%20unconditionally%20set%20''%20before%20removing%20since%20attributes%20with%20%60%24%60%0A%2F%2F%20can't%20be%20set%20using%20setAttribute)%0Aif(node.localName%3D%3D%3D'input'%26%26origName%3D%3D%3D'value')%7Bnode.setAttribute(origName%2C'')%3B%7D%2F%2F%20Remove%20annotation%0Anode.removeAttribute(origName)%3B%2F%2F%20Case%20hackery%3A%20attributes%20are%20lower-case%2C%20but%20bind%20targets%0A%2F%2F%20(properties)%20are%20case%20sensitive.%20Gambit%20is%20to%20map%20dash-case%20to%0A%2F%2F%20camel-case%3A%20%60foo-bar%60%20becomes%20%60fooBar%60.%0A%2F%2F%20Attribute%20bindings%20are%20excepted.%0Aif(kind%3D%3D%3D'property')%7Bname%3DPolymer.CaseMap.dashToCamelCase(name)%3B%7DaddBinding(this%2CtemplateInfo%2CnodeInfo%2Ckind%2Cname%2Cparts%2Cliteral)%3Breturn%20true%3B%7Delse%7Breturn%20_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNodeAttribute'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20binding%20the%20properties%20that%20a%20nested%20template%20depends%20on%20to%20the%20template%0A%20%20%20%20%20%20%20*%20as%20%60_host_%3Cproperty%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNestedTemplate'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3B%2F%2F%20Merge%20host%20props%20into%20outer%20template%20and%20add%20bindings%0Avar%20hostProps%3DnodeInfo.templateInfo.hostProps%3Bvar%20mode%3D'%7B'%3Bfor(var%20source%20in%20hostProps)%7Bvar%20parts%3D%5B%7Bmode%3Amode%2Csource%3Asource%2Cdependencies%3A%5Bsource%5D%7D%5D%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'property'%2C'_host_'%2Bsource%2Cparts)%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20parse%20text%20in%20a%20template%20(either%20attribute%20values%20or%0A%20%20%20%20%20%20%20*%20textContent)%20into%20binding%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Any%20overrides%20of%20this%20method%20should%20return%20an%20array%20of%20binding%20part%0A%20%20%20%20%20%20%20*%20metadata%20%20representing%20one%20or%20more%20bindings%20found%20in%20the%20provided%20text%0A%20%20%20%20%20%20%20*%20and%20any%20%22literal%22%20text%20in%20between.%20%20Any%20non-literal%20parts%20will%20be%20passed%0A%20%20%20%20%20%20%20*%20to%20%60_evaluateBinding%60%20when%20any%20dependencies%20change.%20%20The%20only%20required%0A%20%20%20%20%20%20%20*%20fields%20of%20each%20%22part%22%20in%20the%20returned%20array%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60dependencies%60%20-%20Array%20containing%20trigger%20metadata%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20that%20should%20trigger%20the%20binding%20to%20update%0A%20%20%20%20%20%20%20*%20-%20%60literal%60%20-%20String%20containing%20text%20if%20the%20part%20represents%20a%20literal%3B%0A%20%20%20%20%20%20%20*%20%20%20in%20this%20case%20no%20%60dependencies%60%20are%20needed%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Additional%20metadata%20for%20use%20by%20%60_evaluateBinding%60%20may%20be%20provided%20in%0A%20%20%20%20%20%20%20*%20each%20part%20object%20as%20needed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20handles%20the%20following%20types%20of%20bindings%0A%20%20%20%20%20%20%20*%20(one%20or%20more%20may%20be%20intermixed%20with%20literal%20strings)%3A%0A%20%20%20%20%20%20%20*%20-%20Property%20binding%3A%20%60%5B%5Bprop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Path%20binding%3A%20%60%5B%5Bobject.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Negated%20property%20or%20path%20bindings%3A%20%60%5B%5B!prop%5D%5D%60%20or%20%60%5B%5B!object.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Two-way%20property%20or%20path%20bindings%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%7B%7Bprop%7D%7D%60%2C%20%60%7B%7Bobject.prop%7D%7D%60%2C%20%60%7B%7B!prop%7D%7D%60%20or%20%60%7B%7B!object.prop%7D%7D%60%0A%20%20%20%20%20%20%20*%20-%20Inline%20computed%20method%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%5B%5Bcompute(a%2C%20'literal'%2C%20b)%5D%5D%60%2C%20%60%5B%5B!compute(a%2C%20'literal'%2C%20b)%5D%5D%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20uses%20a%20regular%20expression%20for%20best%0A%20%20%20%20%20%20%20*%20performance.%20However%2C%20the%20regular%20expression%20uses%20a%20white-list%20of%0A%20%20%20%20%20%20%20*%20allowed%20characters%20in%20a%20data-binding%2C%20which%20causes%20problems%20for%0A%20%20%20%20%20%20%20*%20data-bindings%20that%20do%20use%20characters%20not%20in%20this%20white-list.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Instead%20of%20updating%20the%20white-list%20with%20all%20allowed%20characters%2C%0A%20%20%20%20%20%20%20*%20there%20is%20a%20StrictBindingParser%20(see%20lib%2Fmixins%2Fstrict-binding-parser)%0A%20%20%20%20%20%20%20*%20that%20uses%20a%20state%20machine%20instead.%20This%20state%20machine%20is%20able%20to%20handle%0A%20%20%20%20%20%20%20*%20all%20characters.%20However%2C%20it%20is%20slightly%20less%20performant%2C%20therefore%20we%0A%20%20%20%20%20%20%20*%20extracted%20it%20into%20a%20separate%20optional%20mixin.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20Text%20to%20parse%20from%20attribute%20or%20textContent%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Current%20template%20metadata%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C!BindingPart%3E%7D%20Array%20of%20binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseBindings'%2Cvalue%3Afunction%20_parseBindings(text%2CtemplateInfo)%7Bvar%20parts%3D%5B%5D%3Bvar%20lastIndex%3D0%3Bvar%20m%3Dvoid%200%3B%2F%2F%20Example%3A%20%22literal1%7B%7Bprop%7D%7Dliteral2%5B%5B!compute(foo%2Cbar)%5D%5Dfinal%22%0A%2F%2F%20Regex%20matches%3A%0A%2F%2F%20%20%20%20%20%20%20%20Iteration%201%3A%20%20Iteration%202%3A%0A%2F%2F%20m%5B1%5D%3A%20'%7B%7B'%20%20%20%20%20%20%20%20%20%20'%5B%5B'%0A%2F%2F%20m%5B2%5D%3A%20''%20%20%20%20%20%20%20%20%20%20%20%20'!'%0A%2F%2F%20m%5B3%5D%3A%20'prop'%20%20%20%20%20%20%20%20'compute(foo%2Cbar)'%0Awhile((m%3DbindingRegex.exec(text))!%3D%3Dnull)%7B%2F%2F%20Add%20literal%20part%0Aif(m.index%3ElastIndex)%7Bparts.push(%7Bliteral%3Atext.slice(lastIndex%2Cm.index)%7D)%3B%7D%2F%2F%20Add%20binding%20part%0Avar%20mode%3Dm%5B1%5D%5B0%5D%3Bvar%20negate%3DBoolean(m%5B2%5D)%3Bvar%20source%3Dm%5B3%5D.trim()%3Bvar%20customEvent%3Dfalse%2CnotifyEvent%3D''%2Ccolon%3D-1%3Bif(mode%3D%3D'%7B'%26%26(colon%3Dsource.indexOf('%3A%3A'))%3E0)%7BnotifyEvent%3Dsource.substring(colon%2B2)%3Bsource%3Dsource.substring(0%2Ccolon)%3BcustomEvent%3Dtrue%3B%7Dvar%20signature%3DparseMethod(source)%3Bvar%20dependencies%3D%5B%5D%3Bif(signature)%7B%2F%2F%20Inline%20computed%20function%0Avar%20args%3Dsignature.args%2CmethodName%3Dsignature.methodName%3Bfor(var%20i%3D0%3Bi%3Cargs.length%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bif(!arg.literal)%7Bdependencies.push(arg)%3B%7D%7Dvar%20dynamicFns%3DtemplateInfo.dynamicFns%3Bif(dynamicFns%26%26dynamicFns%5BmethodName%5D%7C%7Csignature.static)%7Bdependencies.push(methodName)%3Bsignature.dynamicFn%3Dtrue%3B%7D%7Delse%7B%2F%2F%20Property%20or%20path%0Adependencies.push(source)%3B%7Dparts.push(%7Bsource%3Asource%2Cmode%3Amode%2Cnegate%3Anegate%2CcustomEvent%3AcustomEvent%2Csignature%3Asignature%2Cdependencies%3Adependencies%2Cevent%3AnotifyEvent%7D)%3BlastIndex%3DbindingRegex.lastIndex%3B%7D%2F%2F%20Add%20a%20final%20literal%20part%0Aif(lastIndex%26%26lastIndex%3Ctext.length)%7Bvar%20literal%3Dtext.substring(lastIndex)%3Bif(literal)%7Bparts.push(%7Bliteral%3Aliteral%7D)%3B%7D%7Dif(parts.length)%7Breturn%20parts%3B%7Delse%7Breturn%20null%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20evaluate%20a%20previously%20parsed%20binding%20part%20based%20on%20a%20set%20of%0A%20%20%20%20%20%20%20*%20one%20or%20more%20changed%20dependencies.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bthis%7D%20inst%20Element%20that%20should%20be%20used%20as%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20binding%20dependencies%0A%20%20%20%20%20%20%20*%20%40param%20%7BBindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20that%20triggered%20this%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20the%20binding%20part%20evaluated%20to%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_evaluateBinding'%2Cvalue%3Afunction%20_evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%7Bvar%20value%3Dvoid%200%3Bif(part.signature)%7Bvalue%3DrunMethodEffect(inst%2Cpath%2Cprops%2ColdProps%2Cpart.signature)%3B%7Delse%20if(path!%3Dpart.source)%7Bvalue%3DPolymer.Path.get(inst%2Cpart.source)%3B%7Delse%7Bif(hasPaths%26%26Polymer.Path.isPath(path))%7Bvalue%3DPolymer.Path.get(inst%2Cpath)%3B%7Delse%7Bvalue%3Dinst.__data%5Bpath%5D%3B%7D%7Dif(part.negate)%7Bvalue%3D!value%3B%7Dreturn%20value%3B%7D%7D%5D)%3Breturn%20PropertyEffects%3B%7D(propertyEffectsBase)%3B%2F%2F%20make%20a%20typing%20for%20closure%20%3AP%0APropertyEffectsType%3DPropertyEffects%3Breturn%20PropertyEffects%3B%7D)%3B%2F**%0A%20%20%20*%20Helper%20api%20for%20enqueuing%20client%20dom%20created%20by%20a%20host%20element.%0A%20%20%20*%0A%20%20%20*%20By%20default%20elements%20are%20flushed%20via%20%60_flushProperties%60%20when%0A%20%20%20*%20%60connectedCallback%60%20is%20called.%20Elements%20attach%20their%20client%20dom%20to%0A%20%20%20*%20themselves%20at%20%60ready%60%20time%20which%20results%20from%20this%20first%20flush.%0A%20%20%20*%20This%20provides%20an%20ordering%20guarantee%20that%20the%20client%20dom%20an%20element%0A%20%20%20*%20creates%20is%20flushed%20before%20the%20element%20itself%20(i.e.%20client%20%60ready%60%0A%20%20%20*%20fires%20before%20host%20%60ready%60).%0A%20%20%20*%0A%20%20%20*%20However%2C%20if%20%60_flushProperties%60%20is%20called%20*before*%20an%20element%20is%20connected%2C%0A%20%20%20*%20as%20for%20example%20%60Templatize%60%20does%2C%20this%20ordering%20guarantee%20cannot%20be%0A%20%20%20*%20satisfied%20because%20no%20elements%20are%20connected.%20(Note%3A%20Bound%20elements%20that%0A%20%20%20*%20receive%20data%20do%20become%20enqueued%20clients%20and%20are%20properly%20ordered%20but%0A%20%20%20*%20unbound%20elements%20are%20not.)%0A%20%20%20*%0A%20%20%20*%20To%20maintain%20the%20desired%20%22client%20before%20host%22%20ordering%20guarantee%20for%20this%0A%20%20%20*%20case%20we%20rely%20on%20the%20%22host%20stack.%20Client%20nodes%20registers%20themselves%20with%0A%20%20%20*%20the%20creating%20host%20element%20when%20created.%20This%20ensures%20that%20all%20client%20dom%0A%20%20%20*%20is%20readied%20in%20the%20proper%20order%2C%20maintaining%20the%20desired%20guarantee.%0A%20%20%20*%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20hostStack%3D%7Bstack%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20add%20to%20hostStack%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FregisterHost%3Afunction%20registerHost(inst)%7Bif(this.stack.length)%7Bvar%20host%3Dthis.stack%5Bthis.stack.length-1%5D%3Bhost._enqueueClient(inst)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20begin%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FbeginHosting%3Afunction%20beginHosting(inst)%7Bthis.stack.push(inst)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20end%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FendHosting%3Afunction%20endHosting(inst)%7Bvar%20stackLen%3Dthis.stack.length%3Bif(stackLen%26%26this.stack%5BstackLen-1%5D%3D%3Dinst)%7Bthis.stack.pop()%3B%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-effects.html.js%0A",
            "resourceBytes": 100964,
            "encodedBytes": 0,
            "unusedBytes": 40160
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Provides%20basic%20tracking%20of%20element%20definitions%20(registrations)%20and%0A%20%20%20*%20instance%20counts.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40summary%20Provides%20basic%20tracking%20of%20element%20definitions%20(registrations)%20and%0A%20%20%20*%20instance%20counts.%0A%20%20%20*%2FPolymer.telemetry%3D%7B%2F**%0A%20%20%20%20%20*%20Total%20number%20of%20Polymer%20element%20instances%20created.%0A%20%20%20%20%20*%20%40type%20%7Bnumber%7D%0A%20%20%20%20%20*%2FinstanceCount%3A0%2C%2F**%0A%20%20%20%20%20*%20Array%20of%20Polymer%20element%20classes%20that%20have%20been%20finalized.%0A%20%20%20%20%20*%20%40type%20%7BArray%3CPolymer.Element%3E%7D%0A%20%20%20%20%20*%2Fregistrations%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B!PolymerElementConstructor%7D%20prototype%20Element%20prototype%20to%20log%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F_regLog%3Afunction%20_regLog(prototype)%7Bconsole.log('%5B'%2Bprototype.is%2B'%5D%3A%20registered')%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Registers%20a%20class%20prototype%20for%20telemetry%20purposes.%0A%20%20%20%20%20*%20%40param%20%7BHTMLElement%7D%20prototype%20Element%20prototype%20to%20register%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Fregister%3Afunction%20register(prototype)%7Bthis.registrations.push(prototype)%3BPolymer.log%26%26this._regLog(prototype)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Logs%20all%20elements%20registered%20with%20an%20%60is%60%20to%20the%20console.%0A%20%20%20%20%20*%20%40public%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%2FdumpRegistrations%3Afunction%20dumpRegistrations()%7Bthis.registrations.forEach(this._regLog)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Ftelemetry.html.js%0A",
            "resourceBytes": 1356,
            "encodedBytes": 0,
            "unusedBytes": 146
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Creates%20a%20copy%20of%20%60props%60%20with%20each%20property%20normalized%20such%20that%0A%20%20%20*%20upgraded%20it%20is%20an%20object%20with%20at%20least%20a%20type%20property%20%7B%20type%3A%20Type%7D.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20normalize%0A%20%20%20*%20%40return%20%7BObject%7D%20Copy%20of%20input%20%60props%60%20with%20normalized%20properties%20that%0A%20%20%20*%20are%20in%20the%20form%20%7Btype%3A%20Type%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20normalizeProperties(props)%7Bvar%20output%3D%7B%7D%3Bfor(var%20p%20in%20props)%7Bvar%20o%3Dprops%5Bp%5D%3Boutput%5Bp%5D%3Dtypeof%20o%3D%3D%3D'function'%3F%7Btype%3Ao%7D%3Ao%3B%7Dreturn%20output%3B%7D%2F**%0A%20%20%20*%20Mixin%20that%20provides%20a%20minimal%20starting%20point%20to%20using%20the%20PropertiesChanged%0A%20%20%20*%20mixin%20by%20providing%20a%20mechanism%20to%20declare%20properties%20in%20a%20static%0A%20%20%20*%20getter%20(e.g.%20static%20get%20properties()%20%7B%20return%20%7B%20foo%3A%20String%20%7D%20%7D).%20Changes%0A%20%20%20*%20are%20reported%20via%20the%20%60_propertiesChanged%60%20method.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20provides%20no%20specific%20support%20for%20rendering.%20Users%20are%20expected%0A%20%20%20*%20to%20create%20a%20ShadowRoot%20and%20put%20content%20into%20it%20and%20update%20it%20in%20whatever%0A%20%20%20*%20way%20makes%20sense.%20This%20can%20be%20done%20in%20reaction%20to%20properties%20changing%20by%0A%20%20%20*%20implementing%20%60_propertiesChanged%60.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesChanged%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Mixin%20that%20provides%20a%20minimal%20starting%20point%20for%20using%0A%20%20%20*%20the%20PropertiesChanged%20mixin%20by%20providing%20a%20declarative%20%60properties%60%20object.%0A%20%20%20*%2FPolymer.PropertiesMixin%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertiesChanged(superClass)%3B%2F**%0A%20%20%20%20%20*%20Returns%20the%20super%20class%20constructor%20for%20the%20given%20class%2C%20if%20it%20is%20an%0A%20%20%20%20%20*%20instance%20of%20the%20PropertiesMixin.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PropertiesMixinConstructor%7D%20constructor%20PropertiesMixin%20constructor%0A%20%20%20%20%20*%20%40return%20%7BPropertiesMixinConstructor%7D%20Super%20class%20constructor%0A%20%20%20%20%20*%2Ffunction%20superPropertiesClass(constructor)%7Bvar%20superCtor%3DObject.getPrototypeOf(constructor)%3B%2F%2F%20Note%2C%20the%20%60PropertiesMixin%60%20class%20below%20only%20refers%20to%20the%20class%0A%2F%2F%20generated%20by%20this%20call%20to%20the%20mixin%3B%20the%20instanceof%20test%20only%20works%0A%2F%2F%20because%20the%20mixin%20is%20deduped%20and%20guaranteed%20only%20to%20apply%20once%2C%20hence%0A%2F%2F%20all%20constructors%20in%20a%20proto%20chain%20will%20see%20the%20same%20%60PropertiesMixin%60%0Areturn%20superCtor.prototype%20instanceof%20PropertiesMixin%3F%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2FsuperCtor%3Anull%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20the%20%60properties%60%20object%20for%20the%0A%20%20%20%20%20*%20given%20class.%20Properties%20not%20in%20object%20format%20are%20converted%20to%20at%0A%20%20%20%20%20*%20least%20%7Btype%7D.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BPropertiesMixinConstructor%7D%20constructor%20PropertiesMixin%20constructor%0A%20%20%20%20%20*%20%40return%20%7BObject%7D%20Memoized%20properties%20object%0A%20%20%20%20%20*%2Ffunction%20ownProperties(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownProperties'%2Cconstructor)))%7Bvar%20props%3Dnull%3Bif(constructor.hasOwnProperty(JSCompiler_renameProperty('properties'%2Cconstructor)))%7Bvar%20properties%3Dconstructor.properties%3Bif(properties)%7Bprops%3DnormalizeProperties(properties)%3B%7D%7Dconstructor.__ownProperties%3Dprops%3B%7Dreturn%20constructor.__ownProperties%3B%7D%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertiesMixin%3Dfunction(_base)%7B_inherits(PropertiesMixin%2C_base)%3Bfunction%20PropertiesMixin()%7B_classCallCheck(this%2CPropertiesMixin)%3Breturn%20_possibleConstructorReturn(this%2C(PropertiesMixin.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin)).apply(this%2Carguments))%3B%7D_createClass(PropertiesMixin%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertiesChanged%60%20method%20and%20adds%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60finalize%60%20which%20lazily%20configures%20the%20element's%20property%20accessors.%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7BPolymer.telemetry.instanceCount%2B%2B%3Bthis.constructor.finalize()%3B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20when%20the%20element%20is%20added%20to%20a%20document.%0A%20%20%20%20%20%20%20*%20Calls%20%60_enableProperties%60%20to%20turn%20on%20property%20system%20from%0A%20%20%20%20%20%20%20*%20%60PropertiesChanged%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bif(_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'connectedCallback'%2Cthis))%7B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7Dthis._enableProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20when%20the%20element%20is%20removed%20from%20a%20document%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bif(_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'disconnectedCallback'%2Cthis))%7B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3B%7D%7D%7D%5D%2C%5B%7Bkey%3A'finalize'%2C%2F**%0A%20%20%20%20%20%20%20*%20Finalizes%20an%20element%20definition%2C%20including%20ensuring%20any%20super%20classes%0A%20%20%20%20%20%20%20*%20are%20also%20finalized.%20This%20includes%20ensuring%20property%0A%20%20%20%20%20%20%20*%20accessors%20exist%20on%20the%20element%20prototype.%20This%20method%20calls%0A%20%20%20%20%20%20%20*%20%60_finalizeClass%60%20to%20finalize%20each%20constructor%20in%20the%20prototype%20chain.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20finalize()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('__finalized'%2Cthis)))%7Bvar%20superCtor%3DsuperPropertiesClass(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bif(superCtor)%7BsuperCtor.finalize()%3B%7Dthis.__finalized%3Dtrue%3Bthis._finalizeClass()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Finalize%20an%20element%20class.%20This%20includes%20ensuring%20property%0A%20%20%20%20%20%20%20*%20accessors%20exist%20on%20the%20element%20prototype.%20This%20method%20is%20called%20by%0A%20%20%20%20%20%20%20*%20%60finalize%60%20and%20finalizes%20the%20class%20constructor.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_finalizeClass'%2Cvalue%3Afunction%20_finalizeClass()%7Bvar%20props%3DownProperties(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bif(props)%7Bthis.createProperties(props)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20all%20properties%2C%20including%20those%20inherited%0A%20%20%20%20%20%20%20*%20from%20super%20classes.%20Properties%20not%20in%20object%20format%20are%20converted%20to%0A%20%20%20%20%20%20%20*%20at%20least%20%7Btype%7D.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20Object%20containing%20properties%20for%20this%20class%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'typeForProperty'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertiesChanged%60%20method%20to%20return%20type%20specified%20in%20the%0A%20%20%20%20%20%20%20*%20static%20%60properties%60%20object%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20property%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Type%20to%20which%20to%20deserialize%20attribute%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20typeForProperty(name)%7Bvar%20info%3Dthis._properties%5Bname%5D%3Breturn%20info%26%26info.type%3B%7D%7D%2C%7Bkey%3A'observedAttributes'%2C%2F**%0A%20%20%20%20%20%20%20*%20Implements%20standard%20custom%20elements%20getter%20to%20observes%20the%20attributes%0A%20%20%20%20%20%20%20*%20listed%20in%20%60properties%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2Fget%3Afunction%20get()%7Bvar%20_this2%3Dthis%3Bif(!this.hasOwnProperty('__observedAttributes'))%7BPolymer.telemetry.register(this.prototype)%3Bvar%20props%3Dthis._properties%3Bthis.__observedAttributes%3Dprops%3FObject.keys(props).map(function(p)%7Breturn%20_this2.attributeNameForProperty(p)%3B%7D)%3A%5B%5D%3B%7Dreturn%20this.__observedAttributes%3B%7D%7D%2C%7Bkey%3A'_properties'%2Cget%3Afunction%20get()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('__properties'%2Cthis)))%7Bvar%20superCtor%3DsuperPropertiesClass(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bthis.__properties%3DObject.assign(%7B%7D%2CsuperCtor%26%26superCtor._properties%2CownProperties(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis))%3B%7Dreturn%20this.__properties%3B%7D%7D%5D)%3Breturn%20PropertiesMixin%3B%7D(base)%3Breturn%20PropertiesMixin%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperties-mixin.html.js%0A",
            "resourceBytes": 9658,
            "encodedBytes": 0,
            "unusedBytes": 3205
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20builtCSS%3Dwindow.ShadyCSS%26%26window.ShadyCSS%5B'cssBuild'%5D%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20the%20core%20API%20for%20Polymer's%20meta-programming%0A%20%20%20*%20features%20including%20template%20stamping%2C%20data-binding%2C%20attribute%20deserialization%2C%0A%20%20%20*%20and%20property%20change%20observation.%0A%20%20%20*%0A%20%20%20*%20Subclassers%20may%20provide%20the%20following%20static%20getters%20to%20return%20metadata%0A%20%20%20*%20used%20to%20configure%20Polymer's%20features%20for%20the%20class%3A%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20is()%60%3A%20When%20the%20template%20is%20provided%20via%20a%20%60dom-module%60%2C%0A%20%20%20*%20%20%20users%20should%20return%20the%20%60dom-module%60%20id%20from%20a%20static%20%60is%60%20getter.%20%20If%0A%20%20%20*%20%20%20no%20template%20is%20needed%20or%20the%20template%20is%20provided%20directly%20via%20the%0A%20%20%20*%20%20%20%60template%60%20getter%2C%20there%20is%20no%20need%20to%20define%20%60is%60%20for%20the%20element.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20template()%60%3A%20Users%20may%20provide%20the%20template%20directly%20(as%0A%20%20%20*%20%20%20opposed%20to%20via%20%60dom-module%60)%20by%20implementing%20a%20static%20%60template%60%20getter.%0A%20%20%20*%20%20%20The%20getter%20may%20return%20an%20%60HTMLTemplateElement%60%20or%20a%20string%2C%20which%20will%0A%20%20%20*%20%20%20automatically%20be%20parsed%20into%20a%20template.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20properties()%60%3A%20Should%20return%20an%20object%20describing%0A%20%20%20*%20%20%20property-related%20metadata%20used%20by%20Polymer%20features%20(key%3A%20property%20name%0A%20%20%20*%20%20%20value%3A%20object%20containing%20property%20metadata).%20Valid%20keys%20in%20per-property%0A%20%20%20*%20%20%20metadata%20include%3A%0A%20%20%20*%20%20%20-%20%60type%60%20(String%7CNumber%7CObject%7CArray%7C...)%3A%20Used%20by%0A%20%20%20*%20%20%20%20%20%60attributeChangedCallback%60%20to%20determine%20how%20string-based%20attributes%0A%20%20%20*%20%20%20%20%20are%20deserialized%20to%20JavaScript%20property%20values.%0A%20%20%20*%20%20%20-%20%60notify%60%20(boolean)%3A%20Causes%20a%20change%20in%20the%20property%20to%20fire%20a%0A%20%20%20*%20%20%20%20%20non-bubbling%20event%20called%20%60%3Cproperty%3E-changed%60.%20Elements%20that%20have%0A%20%20%20*%20%20%20%20%20enabled%20two-way%20binding%20to%20the%20property%20use%20this%20event%20to%20observe%20changes.%0A%20%20%20*%20%20%20-%20%60readOnly%60%20(boolean)%3A%20Creates%20a%20getter%20for%20the%20property%2C%20but%20no%20setter.%0A%20%20%20*%20%20%20%20%20To%20set%20a%20read-only%20property%2C%20use%20the%20private%20setter%20method%0A%20%20%20*%20%20%20%20%20%60_setProperty(property%2C%20value)%60.%0A%20%20%20*%20%20%20-%20%60observer%60%20(string)%3A%20Observer%20method%20name%20that%20will%20be%20called%20when%0A%20%20%20*%20%20%20%20%20the%20property%20changes.%20The%20arguments%20of%20the%20method%20are%0A%20%20%20*%20%20%20%20%20%60(value%2C%20previousValue)%60.%0A%20%20%20*%20%20%20-%20%60computed%60%20(string)%3A%20String%20describing%20method%20and%20dependent%20properties%0A%20%20%20*%20%20%20%20%20for%20computing%20the%20value%20of%20this%20property%20(e.g.%20%60'computeFoo(bar%2C%20zot)'%60).%0A%20%20%20*%20%20%20%20%20Computed%20properties%20are%20read-only%20by%20default%20and%20can%20only%20be%20changed%0A%20%20%20*%20%20%20%20%20via%20the%20return%20value%20of%20the%20computing%20method.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20observers()%60%3A%20Array%20of%20strings%20describing%20multi-property%0A%20%20%20*%20%20%20observer%20methods%20and%20their%20dependent%20properties%20(e.g.%0A%20%20%20*%20%20%20%60'observeABC(a%2C%20b%2C%20c)'%60).%0A%20%20%20*%0A%20%20%20*%20The%20base%20class%20provides%20default%20implementations%20for%20the%20following%20standard%0A%20%20%20*%20custom%20element%20lifecycle%20callbacks%3B%20users%20may%20override%20these%2C%20but%20should%0A%20%20%20*%20call%20the%20super%20method%20to%20ensure%0A%20%20%20*%20-%20%60constructor%60%3A%20Run%20when%20the%20element%20is%20created%20or%20upgraded%0A%20%20%20*%20-%20%60connectedCallback%60%3A%20Run%20each%20time%20the%20element%20is%20connected%20to%20the%0A%20%20%20*%20%20%20document%0A%20%20%20*%20-%20%60disconnectedCallback%60%3A%20Run%20each%20time%20the%20element%20is%20disconnected%20from%0A%20%20%20*%20%20%20the%20document%0A%20%20%20*%20-%20%60attributeChangedCallback%60%3A%20Run%20each%20time%20an%20attribute%20in%0A%20%20%20*%20%20%20%60observedAttributes%60%20is%20set%20or%20removed%20(note%3A%20this%20element's%20default%0A%20%20%20*%20%20%20%60observedAttributes%60%20implementation%20will%20automatically%20return%20an%20array%0A%20%20%20*%20%20%20of%20dash-cased%20attributes%20based%20on%20%60properties%60)%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40property%20rootPath%20%7Bstring%7D%20Set%20to%20the%20value%20of%20%60Polymer.rootPath%60%2C%0A%20%20%20*%20%20%20which%20defaults%20to%20the%20main%20document%20path%0A%20%20%20*%20%40property%20importPath%20%7Bstring%7D%20Set%20to%20the%20value%20of%20the%20class's%20static%0A%20%20%20*%20%20%20%60importPath%60%20property%2C%20which%20defaults%20to%20the%20path%20of%20this%20element's%0A%20%20%20*%20%20%20%60dom-module%60%20(when%20%60is%60%20is%20used)%2C%20but%20can%20be%20overridden%20for%20other%0A%20%20%20*%20%20%20import%20strategies.%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20the%20core%20API%20for%20Polymer's%0A%20%20%20*%20meta-programming%20features.%0A%20%20%20*%2FPolymer.ElementMixin%3DPolymer.dedupingMixin(function(base)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20polymerElementBase%3DPolymer.PropertiesMixin(Polymer.PropertyEffects(base))%3B%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20properties%20with%20default%20values.%0A%20%20%20%20%20*%20This%20list%20is%20created%20as%20an%20optimization%20since%20it%20is%20a%20subset%20of%0A%20%20%20%20%20*%20the%20list%20returned%20from%20%60_properties%60.%0A%20%20%20%20%20*%20This%20list%20is%20used%20in%20%60_initializeProperties%60%20to%20set%20property%20defaults.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20constructor%20Element%20class%0A%20%20%20%20%20*%20%40return%20%7BPolymerElementProperties%7D%20Flattened%20properties%20for%20this%20class%0A%20%20%20%20%20*%20%20%20that%20have%20default%20values%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20propertyDefaults(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__propertyDefaults'%2Cconstructor)))%7Bconstructor.__propertyDefaults%3Dnull%3Bvar%20props%3Dconstructor._properties%3Bfor(var%20p%20in%20props)%7Bvar%20info%3Dprops%5Bp%5D%3Bif('value'in%20info)%7Bconstructor.__propertyDefaults%3Dconstructor.__propertyDefaults%7C%7C%7B%7D%3Bconstructor.__propertyDefaults%5Bp%5D%3Dinfo%3B%7D%7D%7Dreturn%20constructor.__propertyDefaults%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20the%20%60observers%60%20array.%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20constructor%20Element%20class%0A%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20containing%20own%20observers%20for%20the%20given%20class%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Ffunction%20ownObservers(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownObservers'%2Cconstructor)))%7Bconstructor.__ownObservers%3Dconstructor.hasOwnProperty(JSCompiler_renameProperty('observers'%2Cconstructor))%3F%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fconstructor.observers%3Anull%3B%7Dreturn%20constructor.__ownObservers%3B%7D%2F**%0A%20%20%20%20%20*%20Creates%20effects%20for%20a%20property.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%2C%20once%20a%20property%20has%20been%20set%20to%0A%20%20%20%20%20*%20%60readOnly%60%2C%20%60computed%60%2C%20%60reflectToAttribute%60%2C%20or%20%60notify%60%0A%20%20%20%20%20*%20these%20values%20may%20not%20be%20changed.%20For%20example%2C%20a%20subclass%20cannot%0A%20%20%20%20%20*%20alter%20these%20settings.%20However%2C%20additional%20%60observers%60%20may%20be%20added%0A%20%20%20%20%20*%20by%20subclasses.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20info%20object%20should%20contain%20property%20metadata%20as%20follows%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60type%60%3A%20%7Bfunction%7D%20type%20to%20which%20an%20attribute%20matching%20the%20property%0A%20%20%20%20%20*%20is%20deserialized.%20Note%20the%20property%20is%20camel-cased%20from%20a%20dash-cased%0A%20%20%20%20%20*%20attribute.%20For%20example%2C%20'foo-bar'%20attribute%20is%20deserialized%20to%20a%0A%20%20%20%20%20*%20property%20named%20'fooBar'.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60readOnly%60%3A%20%7Bboolean%7D%20creates%20a%20readOnly%20property%20and%0A%20%20%20%20%20*%20makes%20a%20private%20setter%20for%20the%20private%20of%20the%20form%20'_setFoo'%20for%20a%0A%20%20%20%20%20*%20property%20'foo'%2C%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60computed%60%3A%20%7Bstring%7D%20creates%20a%20computed%20property.%20A%20computed%20property%0A%20%20%20%20%20*%20is%20also%20automatically%20set%20to%20%60readOnly%3A%20true%60.%20The%20value%20is%20calculated%0A%20%20%20%20%20*%20by%20running%20a%20method%20and%20arguments%20parsed%20from%20the%20given%20string.%20For%0A%20%20%20%20%20*%20example%20'compute(foo)'%20will%20compute%20a%20given%20property%20when%20the%0A%20%20%20%20%20*%20'foo'%20property%20changes%20by%20executing%20the%20'compute'%20method.%20This%20method%0A%20%20%20%20%20*%20must%20return%20the%20computed%20value.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60reflectToAttribute%60%3A%20%7Bboolean%7D%20If%20true%2C%20the%20property%20value%20is%20reflected%0A%20%20%20%20%20*%20to%20an%20attribute%20of%20the%20same%20name.%20Note%2C%20the%20attribute%20is%20dash-cased%0A%20%20%20%20%20*%20so%20a%20property%20named%20'fooBar'%20is%20reflected%20as%20'foo-bar'.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60notify%60%3A%20%7Bboolean%7D%20sends%20a%20non-bubbling%20notification%20event%20when%0A%20%20%20%20%20*%20the%20property%20changes.%20For%20example%2C%20a%20property%20named%20'foo'%20sends%20an%0A%20%20%20%20%20*%20event%20named%20'foo-changed'%20with%20%60event.detail%60%20set%20to%20the%20value%20of%0A%20%20%20%20%20*%20the%20property.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20observer%3A%20%7Bstring%7D%20name%20of%20a%20method%20that%20runs%20when%20the%20property%0A%20%20%20%20%20*%20changes.%20The%20arguments%20of%20the%20method%20are%20(value%2C%20previousValue).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20Users%20may%20want%20control%20over%20modifying%20property%0A%20%20%20%20%20*%20effects%20via%20subclassing.%20For%20example%2C%20a%20user%20might%20want%20to%20make%20a%0A%20%20%20%20%20*%20reflectToAttribute%20property%20not%20do%20so%20in%20a%20subclass.%20We've%20chosen%20to%0A%20%20%20%20%20*%20disable%20this%20because%20it%20leads%20to%20additional%20complication.%0A%20%20%20%20%20*%20For%20example%2C%20a%20readOnly%20effect%20generates%20a%20special%20setter.%20If%20a%20subclass%0A%20%20%20%20%20*%20disables%20the%20effect%2C%20the%20setter%20would%20fail%20unexpectedly.%0A%20%20%20%20%20*%20Based%20on%20feedback%2C%20we%20may%20want%20to%20try%20to%20make%20effects%20more%20malleable%0A%20%20%20%20%20*%20and%2For%20provide%20an%20advanced%20api%20for%20manipulating%20them.%0A%20%20%20%20%20*%20Also%20consider%20adding%20warnings%20when%20an%20effect%20cannot%20be%20changed.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PolymerElement%7D%20proto%20Element%20class%20prototype%20to%20add%20accessors%0A%20%20%20%20%20*%20%20%20and%20effects%20to%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20the%20property.%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20info%20Info%20object%20from%20which%20to%20create%20property%20effects.%0A%20%20%20%20%20*%20Supported%20keys%3A%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20allProps%20Flattened%20map%20of%20all%20properties%20defined%20in%20this%0A%20%20%20%20%20*%20%20%20element%20(including%20inherited%20properties)%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20createPropertyFromConfig(proto%2Cname%2Cinfo%2CallProps)%7B%2F%2F%20computed%20forces%20readOnly...%0Aif(info.computed)%7Binfo.readOnly%3Dtrue%3B%7D%2F%2F%20Note%2C%20since%20all%20computed%20properties%20are%20readOnly%2C%20this%20prevents%0A%2F%2F%20adding%20additional%20computed%20property%20effects%20(which%20leads%20to%20a%20confusing%0A%2F%2F%20setup%20where%20multiple%20triggers%20for%20setting%20a%20property)%0A%2F%2F%20While%20we%20do%20have%20%60hasComputedEffect%60%20this%20is%20set%20on%20the%20property's%0A%2F%2F%20dependencies%20rather%20than%20itself.%0Aif(info.computed%26%26!proto._hasReadOnlyEffect(name))%7Bproto._createComputedProperty(name%2Cinfo.computed%2CallProps)%3B%7Dif(info.readOnly%26%26!proto._hasReadOnlyEffect(name))%7Bproto._createReadOnlyProperty(name%2C!info.computed)%3B%7Dif(info.reflectToAttribute%26%26!proto._hasReflectEffect(name))%7Bproto._createReflectedProperty(name)%3B%7Dif(info.notify%26%26!proto._hasNotifyEffect(name))%7Bproto._createNotifyingProperty(name)%3B%7D%2F%2F%20always%20add%20observer%0Aif(info.observer)%7Bproto._createPropertyObserver(name%2Cinfo.observer%2CallProps%5Binfo.observer%5D)%3B%7D%2F%2F%20always%20create%20the%20mapping%20from%20attribute%20back%20to%20property%20for%20deserialization.%0Aproto._addPropertyToAttributeMap(name)%3B%7D%2F**%0A%20%20%20%20%20*%20Process%20all%20style%20elements%20in%20the%20element%20template.%20Styles%20with%20the%0A%20%20%20%20%20*%20%60include%60%20attribute%20are%20processed%20such%20that%20any%20styles%20in%0A%20%20%20%20%20*%20the%20associated%20%22style%20modules%22%20are%20included%20in%20the%20element%20template.%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20klass%20Element%20class%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20process%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20is%20Name%20of%20element%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20for%20element%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20processElementStyles(klass%2Ctemplate%2Cis%2CbaseURI)%7Bif(!builtCSS)%7Bvar%20templateStyles%3Dtemplate.content.querySelectorAll('style')%3Bvar%20stylesWithImports%3DPolymer.StyleGather.stylesFromTemplate(template)%3B%2F%2F%20insert%20styles%20from%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%20at%20the%20top%20of%20the%20template%0Avar%20linkedStyles%3DPolymer.StyleGather.stylesFromModuleImports(is)%3Bvar%20firstTemplateChild%3Dtemplate.content.firstElementChild%3Bfor(var%20idx%3D0%3Bidx%3ClinkedStyles.length%3Bidx%2B%2B)%7Bvar%20s%3DlinkedStyles%5Bidx%5D%3Bs.textContent%3Dklass._processStyleText(s.textContent%2CbaseURI)%3Btemplate.content.insertBefore(s%2CfirstTemplateChild)%3B%7D%2F%2F%20keep%20track%20of%20the%20last%20%22concrete%22%20style%20in%20the%20template%20we%20have%20encountered%0Avar%20templateStyleIndex%3D0%3B%2F%2F%20ensure%20all%20gathered%20styles%20are%20actually%20in%20this%20template.%0Afor(var%20i%3D0%3Bi%3CstylesWithImports.length%3Bi%2B%2B)%7Bvar%20_s%3DstylesWithImports%5Bi%5D%3Bvar%20templateStyle%3DtemplateStyles%5BtemplateStyleIndex%5D%3B%2F%2F%20if%20the%20style%20is%20not%20in%20this%20template%2C%20it's%20been%20%22included%22%20and%0A%2F%2F%20we%20put%20a%20clone%20of%20it%20in%20the%20template%20before%20the%20style%20that%20included%20it%0Aif(templateStyle!%3D%3D_s)%7B_s%3D_s.cloneNode(true)%3BtemplateStyle.parentNode.insertBefore(_s%2CtemplateStyle)%3B%7Delse%7BtemplateStyleIndex%2B%2B%3B%7D_s.textContent%3Dklass._processStyleText(_s.textContent%2CbaseURI)%3B%7D%7Dif(window.ShadyCSS)%7Bwindow.ShadyCSS.prepareTemplate(template%2Cis)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Look%20up%20template%20from%20dom-module%20for%20element%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!string%7D%20is%20Element%20name%20to%20look%20up%0A%20%20%20%20%20*%20%40return%20%7B!HTMLTemplateElement%7D%20Template%20found%20in%20dom%20module%2C%20or%0A%20%20%20%20%20*%20%20%20undefined%20if%20not%20found%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Ffunction%20getTemplateFromDomModule(is)%7Bvar%20template%3Dnull%3Bif(is%26%26Polymer.DomModule)%7Btemplate%3DPolymer.DomModule.import(is%2C'template')%3B%2F%2F%20Under%20strictTemplatePolicy%2C%20require%20any%20element%20with%20an%20%60is%60%0A%2F%2F%20specified%20to%20have%20a%20dom-module%0Aif(Polymer.strictTemplatePolicy%26%26!template)%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20expecting%20dom-module%20or%20null%20template%20for%20'%2Bis)%3B%7D%7Dreturn%20template%3B%7D%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%2Fvar%20PolymerElement%3Dfunction(_polymerElementBase)%7B_inherits(PolymerElement%2C_polymerElementBase)%3B_createClass(PolymerElement%2Cnull%2C%5B%7Bkey%3A'_finalizeClass'%2C%2F**%0A%20%20%20%20%20%20%20*%20Override%20of%20PropertiesMixin%20_finalizeClass%20to%20create%20observers%20and%0A%20%20%20%20%20%20%20*%20find%20the%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_finalizeClass()%7B_get(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)%2C'_finalizeClass'%2Cthis).call(this)%3Bvar%20observers%3DownObservers(this)%3Bif(observers)%7Bthis.createObservers(observers%2Cthis._properties)%3B%7Dthis._prepareTemplate()%3B%7D%7D%2C%7Bkey%3A'_prepareTemplate'%2Cvalue%3Afunction%20_prepareTemplate()%7B%2F%2F%20note%3A%20create%20%22working%22%20template%20that%20is%20finalized%20at%20instance%20time%0Avar%20template%3D%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fthis.template%3Bif(template)%7Bif(typeof%20template%3D%3D%3D'string')%7Bvar%20t%3Ddocument.createElement('template')%3Bt.innerHTML%3Dtemplate%3Btemplate%3Dt%3B%7Delse%20if(!Polymer.legacyOptimizations)%7Btemplate%3Dtemplate.cloneNode(true)%3B%7D%7Dthis.prototype._template%3Dtemplate%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20of%20PropertiesChanged%20createProperties%20to%20create%20accessors%0A%20%20%20%20%20%20%20*%20and%20property%20effects%20for%20all%20of%20the%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createProperties'%2Cvalue%3Afunction%20createProperties(props)%7Bfor(var%20p%20in%20props)%7BcreatePropertyFromConfig(this.prototype%2Cp%2Cprops%5Bp%5D%2Cprops)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20observers%20for%20the%20given%20%60observers%60%20array.%0A%20%20%20%20%20%20%20*%20Leverages%20%60PropertyEffects%60%20to%20create%20observers.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20observers%20Array%20of%20observer%20descriptors%20for%0A%20%20%20%20%20%20%20*%20%20%20this%20class%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20dynamicFns%20Object%20containing%20keys%20for%20any%20properties%0A%20%20%20%20%20%20%20*%20%20%20that%20are%20functions%20and%20should%20trigger%20the%20effect%20when%20the%20function%0A%20%20%20%20%20%20%20*%20%20%20reference%20is%20changed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createObservers'%2Cvalue%3Afunction%20createObservers(observers%2CdynamicFns)%7Bvar%20proto%3Dthis.prototype%3Bfor(var%20i%3D0%3Bi%3Cobservers.length%3Bi%2B%2B)%7Bproto._createMethodObserver(observers%5Bi%5D%2CdynamicFns)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20that%20will%20be%20stamped%20into%20this%20element's%20shadow%20root.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20a%20%60static%20get%20is()%60%20getter%20is%20defined%2C%20the%20default%20implementation%0A%20%20%20%20%20%20%20*%20will%20return%20the%20first%20%60%3Ctemplate%3E%60%20in%20a%20%60dom-module%60%20whose%20%60id%60%0A%20%20%20%20%20%20%20*%20matches%20this%20element's%20%60is%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20getter%20to%20return%20an%20arbitrary%20template%0A%20%20%20%20%20%20%20*%20(in%20which%20case%20the%20%60is%60%20getter%20is%20unnecessary).%20The%20template%20returned%0A%20%20%20%20%20%20%20*%20may%20be%20either%20an%20%60HTMLTemplateElement%60%20or%20a%20string%20that%20will%20be%0A%20%20%20%20%20%20%20*%20automatically%20parsed%20into%20a%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20when%20subclassing%2C%20if%20the%20super%20class%20overrode%20the%20default%0A%20%20%20%20%20%20%20*%20implementation%20and%20the%20subclass%20would%20like%20to%20provide%20an%20alternate%0A%20%20%20%20%20%20%20*%20template%20via%20a%20%60dom-module%60%2C%20it%20should%20override%20this%20getter%20and%0A%20%20%20%20%20%20%20*%20return%20%60Polymer.DomModule.import(this.is%2C%20'template')%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20a%20subclass%20would%20like%20to%20modify%20the%20super%20class%20template%2C%20it%20should%0A%20%20%20%20%20%20%20*%20clone%20it%20rather%20than%20modify%20it%20in%20place.%20%20If%20the%20getter%20does%20expensive%0A%20%20%20%20%20%20%20*%20work%20such%20as%20cloning%2Fmodifying%20a%20template%2C%20it%20should%20memoize%20the%0A%20%20%20%20%20%20%20*%20template%20for%20maximum%20performance%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20let%20memoizedTemplate%3B%0A%20%20%20%20%20%20%20*%20%20%20class%20MySubClass%20extends%20MySuperClass%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20if%20(!memoizedTemplate)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20memoizedTemplate%20%3D%20MySuperClass.template.cloneNode(true)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20let%20subContent%20%3D%20document.createElement('div')%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20subContent.textContent%20%3D%20'This%20came%20from%20MySubClass'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20memoizedTemplate.content.appendChild(subContent)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20return%20memoizedTemplate%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7BHTMLTemplateElement%7Cstring%7D%20Template%20to%20be%20stamped%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7B%2F%2F%20Explanation%20of%20template-related%20properties%3A%0A%2F%2F%20-%20constructor.template%20(this%20getter)%3A%20the%20template%20for%20the%20class.%0A%2F%2F%20%20%20%20%20This%20can%20come%20from%20the%20prototype%20(for%20legacy%20elements)%2C%20from%20a%0A%2F%2F%20%20%20%20%20dom-module%2C%20or%20from%20the%20super%20class's%20template%20(or%20can%20be%20overridden%0A%2F%2F%20%20%20%20%20altogether%20by%20the%20user)%0A%2F%2F%20-%20constructor._template%3A%20memoized%20version%20of%20constructor.template%0A%2F%2F%20-%20prototype._template%3A%20working%20template%20for%20the%20element%2C%20which%20will%20be%0A%2F%2F%20%20%20%20%20parsed%20and%20modified%20in%20place.%20It%20is%20a%20cloned%20version%20of%0A%2F%2F%20%20%20%20%20constructor.template%2C%20saved%20in%20_finalizeClass().%20Note%20that%20before%0A%2F%2F%20%20%20%20%20this%20getter%20is%20called%2C%20for%20legacy%20elements%20this%20could%20be%20from%20a%0A%2F%2F%20%20%20%20%20_template%20field%20on%20the%20info%20object%20passed%20to%20Polymer()%2C%20a%20behavior%2C%0A%2F%2F%20%20%20%20%20or%20set%20in%20registered()%3B%20once%20the%20static%20getter%20runs%2C%20a%20clone%20of%20it%0A%2F%2F%20%20%20%20%20will%20overwrite%20it%20on%20the%20prototype%20as%20the%20working%20template.%0Aif(!this.hasOwnProperty(JSCompiler_renameProperty('_template'%2Cthis)))%7Bthis._template%3D%2F%2F%20If%20user%20has%20put%20template%20on%20prototype%20(e.g.%20in%20legacy%20via%20registered%0A%2F%2F%20callback%20or%20info%20object)%2C%20prefer%20that%20first%0Athis.prototype.hasOwnProperty(JSCompiler_renameProperty('_template'%2Cthis.prototype))%3Fthis.prototype._template%3A%2F%2F%20Look%20in%20dom-module%20associated%20with%20this%20element's%20is%0AgetTemplateFromDomModule(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.is)%7C%7C%2F%2F%20Next%20look%20for%20superclass%20template%20(call%20the%20super%20impl%20this%0A%2F%2F%20way%20so%20that%20%60this%60%20points%20to%20the%20superclass)%0AObject.getPrototypeOf(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.prototype).constructor.template%3B%7Dreturn%20this._template%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Set%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7Cstring%7D%20value%20Template%20to%20set.%0A%20%20%20%20%20%20%20*%2F%2Cset%3Afunction%20set(value)%7Bthis._template%3Dvalue%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Path%20matching%20the%20url%20from%20which%20the%20element%20was%20imported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20path%20is%20used%20to%20resolve%20url's%20in%20template%20style%20cssText.%0A%20%20%20%20%20%20%20*%20The%20%60importPath%60%20property%20is%20also%20set%20on%20element%20instances%20and%20can%20be%0A%20%20%20%20%20%20%20*%20used%20to%20create%20bindings%20relative%20to%20the%20import%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20For%20elements%20defined%20in%20ES%20modules%2C%20users%20should%20implement%0A%20%20%20%20%20%20%20*%20%60static%20get%20importMeta()%20%7B%20return%20import.meta%3B%20%7D%60%2C%20and%20the%20default%0A%20%20%20%20%20%20%20*%20implementation%20of%20%60importPath%60%20will%20%20return%20%60import.meta.url%60's%20path.%0A%20%20%20%20%20%20%20*%20For%20elements%20defined%20in%20HTML%20imports%2C%20this%20getter%20will%20return%20the%20path%0A%20%20%20%20%20%20%20*%20to%20the%20document%20containing%20a%20%60dom-module%60%20element%20matching%20this%0A%20%20%20%20%20%20%20*%20element's%20static%20%60is%60%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20this%20path%20should%20contain%20a%20trailing%20%60%2F%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20The%20import%20path%20for%20this%20element%20class%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importPath'%2Cget%3Afunction%20get()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('_importPath'%2Cthis)))%7Bvar%20meta%3Dthis.importMeta%3Bif(meta)%7Bthis._importPath%3DPolymer.ResolveUrl.pathFromUrl(meta.url)%3B%7Delse%7Bvar%20module%3DPolymer.DomModule%26%26Polymer.DomModule.import(%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fthis.is)%3Bthis._importPath%3Dmodule%26%26module.assetpath%7C%7CObject.getPrototypeOf(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.prototype).constructor.importPath%3B%7D%7Dreturn%20this._importPath%3B%7D%7D%5D)%3Bfunction%20PolymerElement()%7B_classCallCheck(this%2CPolymerElement)%3B%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)).call(this))%3B_this._template%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this._importPath%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this.rootPath%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this.importPath%3B%2F**%20%40type%20%7BStampedTemplate%20%7C%20HTMLElement%20%7C%20ShadowRoot%7D%20*%2F_this.root%3B%2F**%20%40type%20%7B!Object%3Cstring%2C%20!Element%3E%7D%20*%2F_this.%24%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyAccessors%60%20to%20ensure%20class%0A%20%20%20%20%20%20%20*%20metaprogramming%20related%20to%20property%20accessors%20and%20effects%20has%0A%20%20%20%20%20%20%20*%20completed%20(calls%20%60finalize%60).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20It%20also%20initializes%20any%20property%20defaults%20provided%20via%20%60value%60%20in%0A%20%20%20%20%20%20%20*%20%60properties%60%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F_createClass(PolymerElement%2C%5B%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7Bthis.constructor.finalize()%3B%2F%2F%20note%3A%20finalize%20template%20when%20we%20have%20access%20to%20%60localName%60%20to%0A%2F%2F%20avoid%20dependence%20on%20%60is%60%20for%20polyfilling%20styling.%0Athis.constructor._finalizeTemplate(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis.localName)%3B_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%2F%2F%20set%20path%20defaults%0Athis.rootPath%3DPolymer.rootPath%3Bthis.importPath%3Dthis.constructor.importPath%3B%2F%2F%20apply%20property%20defaults...%0Avar%20p%24%3DpropertyDefaults(this.constructor)%3Bif(!p%24)%7Breturn%3B%7Dfor(var%20p%20in%20p%24)%7Bvar%20info%3Dp%24%5Bp%5D%3B%2F%2F%20Don't%20set%20default%20value%20if%20there%20is%20already%20an%20own%20property%2C%20which%0A%2F%2F%20happens%20when%20a%20%60properties%60%20property%20with%20default%20but%20no%20effects%20had%0A%2F%2F%20a%20property%20set%20(e.g.%20bound)%20by%20its%20host%20before%20upgrade%0Aif(!this.hasOwnProperty(p))%7Bvar%20value%3Dtypeof%20info.value%3D%3D'function'%3Finfo.value.call(this)%3Ainfo.value%3B%2F%2F%20Set%20via%20%60_setProperty%60%20if%20there%20is%20an%20accessor%2C%20to%20enable%0A%2F%2F%20initializing%20readOnly%20property%20defaults%0Aif(this._hasAccessor(p))%7Bthis._setPendingProperty(p%2Cvalue%2Ctrue)%3B%7Delse%7Bthis%5Bp%5D%3Dvalue%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20style%20text%20for%20a%20style%20element%20in%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20cssText%20Text%20containing%20styling%20to%20process%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20rebase%20CSS%20paths%20against%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20The%20processed%20CSS%20text%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2C%2F**%0A%20%20%20%20%20%20%20*%20Provides%20a%20default%20implementation%20of%20the%20standard%20Custom%20Elements%0A%20%20%20%20%20%20%20*%20%60connectedCallback%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20enables%20the%20property%20effects%20system%20and%0A%20%20%20%20%20%20%20*%20flushes%20any%20pending%20properties%2C%20and%20updates%20shimmed%20CSS%20properties%0A%20%20%20%20%20%20%20*%20when%20using%20the%20ShadyCSS%20scoping%2Fcustom%20properties%20polyfill.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%2C%20invalidCasts%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20connectedCallback()%7Bif(window.ShadyCSS%26%26this._template)%7Bwindow.ShadyCSS.styleElement(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis)%3B%7D_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bif(this._template)%7Bthis.root%3Dthis._stampTemplate(this._template)%3Bthis.%24%3Dthis.root.%24%3B%7D_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'ready'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyEffects%60's%20%60_readyClients%60%20call.%20Attaches%0A%20%20%20%20%20%20%20*%20element%20dom%20by%20calling%20%60_attachDom%60%20with%20the%20dom%20stamped%20from%20the%0A%20%20%20%20%20%20%20*%20element's%20template%20via%20%60_stampTemplate%60.%20Note%20that%20this%20allows%0A%20%20%20%20%20%20%20*%20client%20dom%20to%20be%20attached%20to%20the%20element%20prior%20to%20any%20observers%0A%20%20%20%20%20%20%20*%20running.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bif(this._template)%7Bthis.root%3Dthis._attachDom(%2F**%20%40type%20%7BStampedTemplate%7D%20*%2Fthis.root)%3B%7D%2F%2F%20The%20super._readyClients%20here%20sets%20the%20clients%20initialized%20flag.%0A%2F%2F%20We%20must%20wait%20to%20do%20this%20until%20after%20client%20dom%20is%20created%2Fattached%0A%2F%2F%20so%20that%20this%20flag%20can%20be%20checked%20to%20prevent%20notifications%20fired%0A%2F%2F%20during%20this%20process%20from%20being%20handled%20before%20clients%20are%20ready.%0A_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'_readyClients'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Attaches%20an%20element's%20stamped%20dom%20to%20itself.%20By%20default%2C%0A%20%20%20%20%20%20%20*%20this%20method%20creates%20a%20%60shadowRoot%60%20and%20adds%20the%20dom%20to%20it.%0A%20%20%20%20%20%20%20*%20However%2C%20this%20method%20may%20be%20overridden%20to%20allow%20an%20element%0A%20%20%20%20%20%20%20*%20to%20put%20its%20dom%20in%20another%20location.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40throws%20%7BError%7D%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingReturn%7D%0A%20%20%20%20%20%20%20*%20%40param%20%7BStampedTemplate%7D%20dom%20to%20attach%20to%20the%20element.%0A%20%20%20%20%20%20%20*%20%40return%20%7BShadowRoot%7D%20node%20to%20which%20the%20dom%20has%20been%20attached.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_attachDom'%2Cvalue%3Afunction%20_attachDom(dom)%7Bif(this.attachShadow)%7Bif(dom)%7Bif(!this.shadowRoot)%7Bthis.attachShadow(%7Bmode%3A'open'%7D)%3B%7Dthis.shadowRoot.appendChild(dom)%3Breturn%20this.shadowRoot%3B%7Dreturn%20null%3B%7Delse%7Bthrow%20new%20Error('ShadowDOM%20not%20available.%20'%2B%2F%2F%20TODO(sorvell)%3A%20move%20to%20compile-time%20conditional%20when%20supported%0A'Polymer.Element%20can%20create%20dom%20as%20children%20instead%20of%20in%20'%2B'ShadowDOM%20by%20setting%20%60this.root%20%3D%20this%3B%5C%60%20before%20%5C%60ready%5C%60.')%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20When%20using%20the%20ShadyCSS%20scoping%20and%20custom%20property%20shim%2C%20causes%20all%0A%20%20%20%20%20%20%20*%20shimmed%20styles%20in%20this%20element%20(and%20its%20subtree)%20to%20be%20updated%0A%20%20%20%20%20%20%20*%20based%20on%20current%20custom%20property%20values.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20optional%20parameter%20overrides%20inline%20custom%20property%20styles%20with%20an%0A%20%20%20%20%20%20%20*%20object%20of%20properties%20where%20the%20keys%20are%20CSS%20properties%2C%20and%20the%20values%0A%20%20%20%20%20%20%20*%20are%20strings.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%20%60this.updateStyles(%7B'--color'%3A%20'blue'%7D)%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20These%20properties%20are%20retained%20unless%20a%20value%20of%20%60null%60%20is%20set.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%3A%20This%20function%20does%20not%20support%20updating%20CSS%20mixins.%0A%20%20%20%20%20%20%20*%20You%20can%20not%20dynamically%20change%20the%20value%20of%20an%20%60%40apply%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20properties%20Bag%20of%20custom%20property%20key%2Fvalues%20to%0A%20%20%20%20%20%20%20*%20%20%20apply%20to%20this%20element.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'updateStyles'%2Cvalue%3Afunction%20updateStyles(properties)%7Bif(window.ShadyCSS)%7Bwindow.ShadyCSS.styleSubtree(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%2Cproperties)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Rewrites%20a%20given%20URL%20relative%20to%20a%20base%20URL.%20The%20base%20URL%20defaults%20to%0A%20%20%20%20%20%20%20*%20the%20original%20location%20of%20the%20document%20containing%20the%20%60dom-module%60%20for%0A%20%20%20%20%20%20%20*%20this%20element.%20This%20method%20will%20return%20the%20same%20URL%20before%20and%20after%0A%20%20%20%20%20%20%20*%20bundling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20this%20function%20performs%20no%20resolution%20for%20URLs%20that%20start%0A%20%20%20%20%20%20%20*%20with%20%60%2F%60%20(absolute%20URLs)%20or%20%60%23%60%20(hash%20identifiers).%20%20For%20general%20purpose%0A%20%20%20%20%20%20%20*%20URL%20resolution%2C%20use%20%60window.URL%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20url%20URL%20to%20resolve.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20base%20Optional%20base%20URL%20to%20resolve%20against%2C%20defaults%0A%20%20%20%20%20%20%20*%20to%20the%20element's%20%60importPath%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Rewritten%20URL%20relative%20to%20base%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'resolveUrl'%2Cvalue%3Afunction%20resolveUrl(url%2Cbase)%7Bif(!base%26%26this.importPath)%7Bbase%3DPolymer.ResolveUrl.resolveUrl(this.importPath)%3B%7Dreturn%20Polymer.ResolveUrl.resolveUrl(url%2Cbase)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20to%20add%20map%20of%20dynamic%20functions%20on%0A%20%20%20%20%20%20%20*%20template%20info%2C%20for%20consumption%20by%20%60PropertyEffects%60%20template%20binding%0A%20%20%20%20%20%20%20*%20code.%20This%20map%20determines%20which%20method%20templates%20should%20have%20accessors%0A%20%20%20%20%20%20%20*%20created%20for%20them.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%5D%2C%5B%7Bkey%3A'_processStyleText'%2Cvalue%3Afunction%20_processStyleText(cssText%2CbaseURI)%7Breturn%20Polymer.ResolveUrl.resolveCss(cssText%2CbaseURI)%3B%7D%2F**%0A%20%20%20%20%20%20*%20Configures%20an%20element%20%60proto%60%20to%20function%20with%20a%20given%20%60template%60.%0A%20%20%20%20%20%20*%20The%20element%20name%20%60is%60%20and%20extends%20%60ext%60%20must%20be%20specified%20for%20ShadyCSS%0A%20%20%20%20%20%20*%20style%20scoping.%0A%20%20%20%20%20%20*%0A%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20is%20Tag%20name%20(or%20type%20extension%20name)%20for%20this%20element%0A%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_finalizeTemplate'%2Cvalue%3Afunction%20_finalizeTemplate(is)%7B%2F**%20%40const%20%7BHTMLTemplateElement%7D%20*%2Fvar%20template%3Dthis.prototype._template%3Bif(template%26%26!template.__polymerFinalized)%7Btemplate.__polymerFinalized%3Dtrue%3Bvar%20importPath%3Dthis.importPath%3Bvar%20baseURI%3DimportPath%3FPolymer.ResolveUrl.resolveUrl(importPath)%3A''%3B%2F%2F%20e.g.%20support%20%60include%3D%22module-name%22%60%2C%20and%20ShadyCSS%0AprocessElementStyles(this%2Ctemplate%2Cis%2CbaseURI)%3Bthis.prototype._bindTemplate(template)%3B%7D%7D%7D%2C%7Bkey%3A'_parseTemplateContent'%2Cvalue%3Afunction%20_parseTemplateContent(template%2CtemplateInfo%2CnodeInfo)%7BtemplateInfo.dynamicFns%3DtemplateInfo.dynamicFns%7C%7Cthis._properties%3Breturn%20_get(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)%2C'_parseTemplateContent'%2Cthis).call(this%2Ctemplate%2CtemplateInfo%2CnodeInfo)%3B%7D%7D%5D)%3Breturn%20PolymerElement%3B%7D(polymerElementBase)%3Breturn%20PolymerElement%3B%7D)%3B%2F**%0A%20%20%20*%20When%20using%20the%20ShadyCSS%20scoping%20and%20custom%20property%20shim%2C%20causes%20all%0A%20%20%20*%20shimmed%20%60styles%60%20(via%20%60custom-style%60)%20in%20the%20document%20(and%20its%20subtree)%0A%20%20%20*%20to%20be%20updated%20based%20on%20current%20custom%20property%20values.%0A%20%20%20*%0A%20%20%20*%20The%20optional%20parameter%20overrides%20inline%20custom%20property%20styles%20with%20an%0A%20%20%20*%20object%20of%20properties%20where%20the%20keys%20are%20CSS%20properties%2C%20and%20the%20values%0A%20%20%20*%20are%20strings.%0A%20%20%20*%0A%20%20%20*%20Example%3A%20%60Polymer.updateStyles(%7B'--color'%3A%20'blue'%7D)%60%0A%20%20%20*%0A%20%20%20*%20These%20properties%20are%20retained%20unless%20a%20value%20of%20%60null%60%20is%20set.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20props%20Bag%20of%20custom%20property%20key%2Fvalues%20to%0A%20%20%20*%20%20%20apply%20to%20the%20document.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.updateStyles%3Dfunction(props)%7Bif(window.ShadyCSS)%7Bwindow.ShadyCSS.styleDocument(props)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Felement-mixin.html.js%0A",
            "resourceBytes": 30666,
            "encodedBytes": 0,
            "unusedBytes": 12276
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20%40summary%20Collapse%20multiple%20callbacks%20into%20one%20invocation%20after%20a%20timer.%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2Fvar%20Debouncer%3Dfunction()%7Bfunction%20Debouncer()%7B_classCallCheck(this%2CDebouncer)%3Bthis._asyncModule%3Dnull%3Bthis._callback%3Dnull%3Bthis._timer%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Sets%20the%20scheduler%3B%20that%20is%2C%20a%20module%20with%20the%20Async%20interface%2C%0A%20%20%20%20%20*%20a%20callback%20and%20optional%20arguments%20to%20be%20passed%20to%20the%20run%20function%0A%20%20%20%20%20*%20from%20the%20async%20module.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!AsyncInterface%7D%20asyncModule%20Object%20with%20Async%20interface.%0A%20%20%20%20%20*%20%40param%20%7Bfunction()%7D%20callback%20Callback%20to%20run.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(Debouncer%2C%5B%7Bkey%3A'setConfig'%2Cvalue%3Afunction%20setConfig(asyncModule%2Ccallback)%7Bvar%20_this%3Dthis%3Bthis._asyncModule%3DasyncModule%3Bthis._callback%3Dcallback%3Bthis._timer%3Dthis._asyncModule.run(function()%7B_this._timer%3Dnull%3B_this._callback()%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20*%20Cancels%20an%20active%20debouncer%20and%20returns%20a%20reference%20to%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancel'%2Cvalue%3Afunction%20cancel()%7Bif(this.isActive())%7Bthis._asyncModule.cancel(this._timer)%3Bthis._timer%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Flushes%20an%20active%20debouncer%20and%20returns%20a%20reference%20to%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flush'%2Cvalue%3Afunction%20flush()%7Bif(this.isActive())%7Bthis.cancel()%3Bthis._callback()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20debouncer%20is%20active.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20active.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isActive'%2Cvalue%3Afunction%20isActive()%7Breturn%20this._timer!%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Creates%20a%20debouncer%20if%20no%20debouncer%20is%20passed%20as%20a%20parameter%0A%20%20%20%20%20*%20or%20it%20cancels%20an%20active%20debouncer%20otherwise.%20The%20following%0A%20%20%20%20%20*%20example%20shows%20how%20a%20debouncer%20can%20be%20called%20multiple%20times%20within%20a%0A%20%20%20%20%20*%20microtask%20and%20%22debounced%22%20such%20that%20the%20provided%20callback%20function%20is%0A%20%20%20%20%20*%20called%20once.%20Add%20this%20method%20to%20a%20custom%20element%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20_debounceWork()%20%7B%0A%20%20%20%20%20*%20%20%20this._debounceJob%20%3D%20Polymer.Debouncer.debounce(this._debounceJob%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20Polymer.Async.microTask%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20*%20%20%20%20%20this._doWork()%3B%0A%20%20%20%20%20*%20%20%20%7D)%3B%0A%20%20%20%20%20*%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20If%20the%20%60_debounceWork%60%20method%20is%20called%20multiple%20times%20within%20the%20same%0A%20%20%20%20%20*%20microtask%2C%20the%20%60_doWork%60%20function%20will%20be%20called%20only%20once%20at%20the%20next%0A%20%20%20%20%20*%20microtask%20checkpoint.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20In%20testing%20it%20is%20often%20convenient%20to%20avoid%20asynchrony.%20To%20accomplish%0A%20%20%20%20%20*%20this%20with%20a%20debouncer%2C%20you%20can%20use%20%60Polymer.enqueueDebouncer%60%20and%0A%20%20%20%20%20*%20%60Polymer.flush%60.%20For%20example%2C%20extend%20the%20above%20example%20by%20adding%0A%20%20%20%20%20*%20%60Polymer.enqueueDebouncer(this._debounceJob)%60%20at%20the%20end%20of%20the%0A%20%20%20%20%20*%20%60_debounceWork%60%20method.%20Then%20in%20a%20test%2C%20call%20%60Polymer.flush%60%20to%20ensure%0A%20%20%20%20%20*%20the%20debouncer%20has%20completed.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BDebouncer%3F%7D%20debouncer%20Debouncer%20object.%0A%20%20%20%20%20*%20%40param%20%7B!AsyncInterface%7D%20asyncModule%20Object%20with%20Async%20interface%0A%20%20%20%20%20*%20%40param%20%7Bfunction()%7D%20callback%20Callback%20to%20run.%0A%20%20%20%20%20*%20%40return%20%7B!Debouncer%7D%20Returns%20a%20debouncer%20object.%0A%20%20%20%20%20*%2F%7D%5D%2C%5B%7Bkey%3A'debounce'%2Cvalue%3Afunction%20debounce(debouncer%2CasyncModule%2Ccallback)%7Bif(debouncer%20instanceof%20Debouncer)%7Bdebouncer.cancel()%3B%7Delse%7Bdebouncer%3Dnew%20Debouncer()%3B%7Ddebouncer.setConfig(asyncModule%2Ccallback)%3Breturn%20debouncer%3B%7D%7D%5D)%3Breturn%20Debouncer%3B%7D()%3B%2F**%20%40const%20*%2FPolymer.Debouncer%3DDebouncer%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fdebounce.html.js%0A",
            "resourceBytes": 3961,
            "encodedBytes": 0,
            "unusedBytes": 862
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20detect%20native%20touch%20action%20support%0Avar%20HAS_NATIVE_TA%3Dtypeof%20document.head.style.touchAction%3D%3D%3D'string'%3Bvar%20GESTURE_KEY%3D'__polymerGestures'%3Bvar%20HANDLED_OBJ%3D'__polymerGesturesHandled'%3Bvar%20TOUCH_ACTION%3D'__polymerGesturesTouchAction'%3B%2F%2F%20radius%20for%20tap%20and%20track%0Avar%20TAP_DISTANCE%3D25%3Bvar%20TRACK_DISTANCE%3D5%3B%2F%2F%20number%20of%20last%20N%20track%20positions%20to%20keep%0Avar%20TRACK_LENGTH%3D2%3B%2F%2F%20Disabling%20%22mouse%22%20handlers%20for%202500ms%20is%20enough%0Avar%20MOUSE_TIMEOUT%3D2500%3Bvar%20MOUSE_EVENTS%3D%5B'mousedown'%2C'mousemove'%2C'mouseup'%2C'click'%5D%3B%2F%2F%20an%20array%20of%20bitmask%20values%20for%20mapping%20MouseEvent.which%20to%20MouseEvent.buttons%0Avar%20MOUSE_WHICH_TO_BUTTONS%3D%5B0%2C1%2C4%2C2%5D%3Bvar%20MOUSE_HAS_BUTTONS%3Dfunction()%7Btry%7Breturn%20new%20MouseEvent('test'%2C%7Bbuttons%3A1%7D).buttons%3D%3D%3D1%3B%7Dcatch(e)%7Breturn%20false%3B%7D%7D()%3B%2F**%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20Possible%20mouse%20event%20name%0A%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20mouse%20event%2C%20false%20if%20not%0A%20%20%20*%2Ffunction%20isMouseEvent(name)%7Breturn%20MOUSE_EVENTS.indexOf(name)%3E-1%3B%7D%2F*%20eslint%20no-empty%3A%20%5B%22error%22%2C%20%7B%20%22allowEmptyCatch%22%3A%20true%20%7D%5D%20*%2F%2F%2F%20check%20for%20passive%20event%20listeners%0Avar%20SUPPORTS_PASSIVE%3Dfalse%3B(function()%7Btry%7Bvar%20opts%3DObject.defineProperty(%7B%7D%2C'passive'%2C%7Bget%3Afunction%20get()%7BSUPPORTS_PASSIVE%3Dtrue%3B%7D%7D)%3Bwindow.addEventListener('test'%2Cnull%2Copts)%3Bwindow.removeEventListener('test'%2Cnull%2Copts)%3B%7Dcatch(e)%7B%7D%7D)()%3B%2F**%0A%20%20%20*%20Generate%20settings%20for%20event%20listeners%2C%20dependant%20on%20%60Polymer.passiveTouchGestures%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Event%20name%20to%20determine%20if%20%60%7Bpassive%7D%60%20option%20is%20needed%0A%20%20%20*%20%40return%20%7B%7Bpassive%3A%20boolean%7D%20%7C%20undefined%7D%20Options%20to%20use%20for%20addEventListener%20and%20removeEventListener%0A%20%20%20*%2Ffunction%20PASSIVE_TOUCH(eventName)%7Bif(isMouseEvent(eventName)%7C%7CeventName%3D%3D%3D'touchend')%7Breturn%3B%7Dif(HAS_NATIVE_TA%26%26SUPPORTS_PASSIVE%26%26Polymer.passiveTouchGestures)%7Breturn%7Bpassive%3Atrue%7D%3B%7Delse%7Breturn%3B%7D%7D%2F%2F%20Check%20for%20touch-only%20devices%0Avar%20IS_TOUCH_ONLY%3Dnavigator.userAgent.match(%2FiP(%3F%3A%5Boa%5Dd%7Chone)%7CAndroid%2F)%3Bvar%20GestureRecognizer%3Dfunction%20GestureRecognizer()%7B%7D%3B%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%20%40type%20%7Bfunction()%3A%20void%7D%20*%2FGestureRecognizer.prototype.reset%3B%2F**%20%40type%20%7Bfunction(MouseEvent)%3A%20void%20%7C%20undefined%7D%20*%2FGestureRecognizer.prototype.mousedown%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.mousemove%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.mouseup%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchstart%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchmove%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchend%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.click%3B%2F%2F%20keep%20track%20of%20any%20labels%20hit%20by%20the%20mouseCanceller%0A%2F**%20%40type%20%7B!Array%3C!HTMLLabelElement%3E%7D%20*%2Fvar%20clickedLabels%3D%5B%5D%3B%2F**%20%40type%20%7B!Object%3Cboolean%3E%7D%20*%2Fvar%20labellable%3D%7B'button'%3Atrue%2C'input'%3Atrue%2C'keygen'%3Atrue%2C'meter'%3Atrue%2C'output'%3Atrue%2C'textarea'%3Atrue%2C'progress'%3Atrue%2C'select'%3Atrue%7D%3B%2F%2F%20Defined%20at%20https%3A%2F%2Fhtml.spec.whatwg.org%2Fmultipage%2Fform-control-infrastructure.html%23enabling-and-disabling-form-controls%3A-the-disabled-attribute%0A%2F**%20%40type%20%7B!Object%3Cboolean%3E%7D%20*%2Fvar%20canBeDisabled%3D%7B'button'%3Atrue%2C'command'%3Atrue%2C'fieldset'%3Atrue%2C'input'%3Atrue%2C'keygen'%3Atrue%2C'optgroup'%3Atrue%2C'option'%3Atrue%2C'select'%3Atrue%2C'textarea'%3Atrue%7D%3B%2F**%0A%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20to%20check%20labelling%20status%0A%20%20%20*%20%40return%20%7Bboolean%7D%20element%20can%20have%20labels%0A%20%20%20*%2Ffunction%20canBeLabelled(el)%7Breturn%20labellable%5Bel.localName%5D%7C%7Cfalse%3B%7D%2F**%0A%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20that%20may%20be%20labelled.%0A%20%20%20*%20%40return%20%7B!Array%3C!HTMLLabelElement%3E%7D%20Relevant%20label%20for%20%60el%60%0A%20%20%20*%2Ffunction%20matchingLabels(el)%7Bvar%20labels%3DArray.from(%2F**%20%40type%20%7BHTMLInputElement%7D%20*%2Fel.labels%7C%7C%5B%5D)%3B%2F%2F%20IE%20doesn't%20have%20%60labels%60%20and%20Safari%20doesn't%20populate%20%60labels%60%0A%2F%2F%20if%20element%20is%20in%20a%20shadowroot.%0A%2F%2F%20In%20this%20instance%2C%20finding%20the%20non-ancestor%20labels%20is%20enough%2C%0A%2F%2F%20as%20the%20mouseCancellor%20code%20will%20handle%20ancstor%20labels%0Aif(!labels.length)%7Blabels%3D%5B%5D%3Bvar%20root%3Del.getRootNode()%3B%2F%2F%20if%20there%20is%20an%20id%20on%20%60el%60%2C%20check%20for%20all%20labels%20with%20a%20matching%20%60for%60%20attribute%0Aif(el.id)%7Bvar%20matching%3Droot.querySelectorAll('label%5Bfor%20%3D%20'%2Bel.id%2B'%5D')%3Bfor(var%20i%3D0%3Bi%3Cmatching.length%3Bi%2B%2B)%7Blabels.push(%2F**%20%40type%20%7B!HTMLLabelElement%7D%20*%2Fmatching%5Bi%5D)%3B%7D%7D%7Dreturn%20labels%3B%7D%2F%2F%20touch%20will%20make%20synthetic%20mouse%20events%0A%2F%2F%20%60preventDefault%60%20on%20touchend%20will%20cancel%20them%2C%0A%2F%2F%20but%20this%20breaks%20%60%3Cinput%3E%60%20focus%20and%20link%20clicks%0A%2F%2F%20disable%20mouse%20handlers%20for%20MOUSE_TIMEOUT%20ms%20after%0A%2F%2F%20a%20touchend%20to%20ignore%20synthetic%20mouse%20events%0Avar%20mouseCanceller%3Dfunction%20mouseCanceller(mouseEvent)%7B%2F%2F%20Check%20for%20sourceCapabilities%2C%20used%20to%20distinguish%20synthetic%20events%0A%2F%2F%20if%20mouseEvent%20did%20not%20come%20from%20a%20device%20that%20fires%20touch%20events%2C%0A%2F%2F%20it%20was%20made%20by%20a%20real%20mouse%20and%20should%20be%20counted%0A%2F%2F%20http%3A%2F%2Fwicg.github.io%2FInputDeviceCapabilities%2F%23dom-inputdevicecapabilities-firestouchevents%0Avar%20sc%3DmouseEvent.sourceCapabilities%3Bif(sc%26%26!sc.firesTouchEvents)%7Breturn%3B%7D%2F%2F%20skip%20synthetic%20mouse%20events%0AmouseEvent%5BHANDLED_OBJ%5D%3D%7Bskip%3Atrue%7D%3B%2F%2F%20disable%20%22ghost%20clicks%22%0Aif(mouseEvent.type%3D%3D%3D'click')%7Bvar%20clickFromLabel%3Dfalse%3Bvar%20path%3DmouseEvent.composedPath%26%26mouseEvent.composedPath()%3Bif(path)%7Bfor(var%20i%3D0%3Bi%3Cpath.length%3Bi%2B%2B)%7Bif(path%5Bi%5D.nodeType%3D%3D%3DNode.ELEMENT_NODE)%7Bif(path%5Bi%5D.localName%3D%3D%3D'label')%7BclickedLabels.push(path%5Bi%5D)%3B%7Delse%20if(canBeLabelled(path%5Bi%5D))%7Bvar%20ownerLabels%3DmatchingLabels(path%5Bi%5D)%3B%2F%2F%20check%20if%20one%20of%20the%20clicked%20labels%20is%20labelling%20this%20element%0Afor(var%20j%3D0%3Bj%3CownerLabels.length%3Bj%2B%2B)%7BclickFromLabel%3DclickFromLabel%7C%7CclickedLabels.indexOf(ownerLabels%5Bj%5D)%3E-1%3B%7D%7D%7Dif(path%5Bi%5D%3D%3D%3DPOINTERSTATE.mouse.target)%7Breturn%3B%7D%7D%7D%2F%2F%20if%20one%20of%20the%20clicked%20labels%20was%20labelling%20the%20target%20element%2C%0A%2F%2F%20this%20is%20not%20a%20ghost%20click%0Aif(clickFromLabel)%7Breturn%3B%7DmouseEvent.preventDefault()%3BmouseEvent.stopPropagation()%3B%7D%7D%3B%2F**%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setup%20True%20to%20add%2C%20false%20to%20remove.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20setupTeardownMouseCanceller(setup)%7Bvar%20events%3DIS_TOUCH_ONLY%3F%5B'click'%5D%3AMOUSE_EVENTS%3Bfor(var%20i%3D0%2Cen%3Bi%3Cevents.length%3Bi%2B%2B)%7Ben%3Devents%5Bi%5D%3Bif(setup)%7B%2F%2F%20reset%20clickLabels%20array%0AclickedLabels.length%3D0%3Bdocument.addEventListener(en%2CmouseCanceller%2Ctrue)%3B%7Delse%7Bdocument.removeEventListener(en%2CmouseCanceller%2Ctrue)%3B%7D%7D%7Dfunction%20ignoreMouse(e)%7Bif(!POINTERSTATE.mouse.mouseIgnoreJob)%7BsetupTeardownMouseCanceller(true)%3B%7Dvar%20unset%3Dfunction%20unset()%7BsetupTeardownMouseCanceller()%3BPOINTERSTATE.mouse.target%3Dnull%3BPOINTERSTATE.mouse.mouseIgnoreJob%3Dnull%3B%7D%3BPOINTERSTATE.mouse.target%3De.composedPath()%5B0%5D%3BPOINTERSTATE.mouse.mouseIgnoreJob%3DPolymer.Debouncer.debounce(POINTERSTATE.mouse.mouseIgnoreJob%2CPolymer.Async.timeOut.after(MOUSE_TIMEOUT)%2Cunset)%3B%7D%2F**%0A%20%20%20*%20%40param%20%7BMouseEvent%7D%20ev%20event%20to%20test%20for%20left%20mouse%20button%20down%0A%20%20%20*%20%40return%20%7Bboolean%7D%20has%20left%20mouse%20button%20down%0A%20%20%20*%2Ffunction%20hasLeftMouseButton(ev)%7Bvar%20type%3Dev.type%3B%2F%2F%20exit%20early%20if%20the%20event%20is%20not%20a%20mouse%20event%0Aif(!isMouseEvent(type))%7Breturn%20false%3B%7D%2F%2F%20ev.button%20is%20not%20reliable%20for%20mousemove%20(0%20is%20overloaded%20as%20both%20left%20button%20and%20no%20buttons)%0A%2F%2F%20instead%20we%20use%20ev.buttons%20(bitmask%20of%20buttons)%20or%20fall%20back%20to%20ev.which%20(deprecated%2C%200%20for%20no%20buttons%2C%201%20for%20left%20button)%0Aif(type%3D%3D%3D'mousemove')%7B%2F%2F%20allow%20undefined%20for%20testing%20events%0Avar%20buttons%3Dev.buttons%3D%3D%3Dundefined%3F1%3Aev.buttons%3Bif(ev%20instanceof%20window.MouseEvent%26%26!MOUSE_HAS_BUTTONS)%7Bbuttons%3DMOUSE_WHICH_TO_BUTTONS%5Bev.which%5D%7C%7C0%3B%7D%2F%2F%20buttons%20is%20a%20bitmask%2C%20check%20that%20the%20left%20button%20bit%20is%20set%20(1)%0Areturn%20Boolean(buttons%261)%3B%7Delse%7B%2F%2F%20allow%20undefined%20for%20testing%20events%0Avar%20button%3Dev.button%3D%3D%3Dundefined%3F0%3Aev.button%3B%2F%2F%20ev.button%20is%200%20in%20mousedown%2Fmouseup%2Fclick%20for%20left%20button%20activation%0Areturn%20button%3D%3D%3D0%3B%7D%7Dfunction%20isSyntheticClick(ev)%7Bif(ev.type%3D%3D%3D'click')%7B%2F%2F%20ev.detail%20is%200%20for%20HTMLElement.click%20in%20most%20browsers%0Aif(ev.detail%3D%3D%3D0)%7Breturn%20true%3B%7D%2F%2F%20in%20the%20worst%20case%2C%20check%20that%20the%20x%2Fy%20position%20of%20the%20click%20is%20within%0A%2F%2F%20the%20bounding%20box%20of%20the%20target%20of%20the%20event%0A%2F%2F%20Thanks%20IE%2010%20%3E%3A(%0Avar%20t%3DGestures._findOriginalTarget(ev)%3B%2F%2F%20make%20sure%20the%20target%20of%20the%20event%20is%20an%20element%20so%20we%20can%20use%20getBoundingClientRect%2C%0A%2F%2F%20if%20not%2C%20just%20assume%20it%20is%20a%20synthetic%20click%0Aif(!t.nodeType%7C%7C%2F**%20%40type%20%7BElement%7D%20*%2Ft.nodeType!%3D%3DNode.ELEMENT_NODE)%7Breturn%20true%3B%7Dvar%20bcr%3D%2F**%20%40type%20%7BElement%7D%20*%2Ft.getBoundingClientRect()%3B%2F%2F%20use%20page%20x%2Fy%20to%20account%20for%20scrolling%0Avar%20x%3Dev.pageX%2Cy%3Dev.pageY%3B%2F%2F%20ev%20is%20a%20synthetic%20click%20if%20the%20position%20is%20outside%20the%20bounding%20box%20of%20the%20target%0Areturn!(x%3E%3Dbcr.left%26%26x%3C%3Dbcr.right%26%26y%3E%3Dbcr.top%26%26y%3C%3Dbcr.bottom)%3B%7Dreturn%20false%3B%7Dvar%20POINTERSTATE%3D%7Bmouse%3A%7Btarget%3Anull%2CmouseIgnoreJob%3Anull%7D%2Ctouch%3A%7Bx%3A0%2Cy%3A0%2Cid%3A-1%2CscrollDecided%3Afalse%7D%7D%3Bfunction%20firstTouchAction(ev)%7Bvar%20ta%3D'auto'%3Bvar%20path%3Dev.composedPath%26%26ev.composedPath()%3Bif(path)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cpath.length%3Bi%2B%2B)%7Bn%3Dpath%5Bi%5D%3Bif(n%5BTOUCH_ACTION%5D)%7Bta%3Dn%5BTOUCH_ACTION%5D%3Bbreak%3B%7D%7D%7Dreturn%20ta%3B%7Dfunction%20trackDocument(stateObj%2Cmovefn%2Cupfn)%7BstateObj.movefn%3Dmovefn%3BstateObj.upfn%3Dupfn%3Bdocument.addEventListener('mousemove'%2Cmovefn)%3Bdocument.addEventListener('mouseup'%2Cupfn)%3B%7Dfunction%20untrackDocument(stateObj)%7Bdocument.removeEventListener('mousemove'%2CstateObj.movefn)%3Bdocument.removeEventListener('mouseup'%2CstateObj.upfn)%3BstateObj.movefn%3Dnull%3BstateObj.upfn%3Dnull%3B%7D%2F%2F%20use%20a%20document-wide%20touchend%20listener%20to%20start%20the%20ghost-click%20prevention%20mechanism%0A%2F%2F%20Use%20passive%20event%20listeners%2C%20if%20supported%2C%20to%20not%20affect%20scrolling%20performance%0Adocument.addEventListener('touchend'%2CignoreMouse%2CSUPPORTS_PASSIVE%3F%7Bpassive%3Atrue%7D%3Afalse)%3B%2F**%0A%20%20%20*%20Module%20for%20adding%20listeners%20to%20a%20node%20for%20the%20following%20normalized%0A%20%20%20*%20cross-platform%20%22gesture%22%20events%3A%0A%20%20%20*%20-%20%60down%60%20-%20mouse%20or%20touch%20went%20down%0A%20%20%20*%20-%20%60up%60%20-%20mouse%20or%20touch%20went%20up%0A%20%20%20*%20-%20%60tap%60%20-%20mouse%20click%20or%20finger%20tap%0A%20%20%20*%20-%20%60track%60%20-%20mouse%20drag%20or%20touch%20move%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20for%20adding%20cross-platform%20gesture%20event%20listeners.%0A%20%20%20*%2Fvar%20Gestures%3D%7Bgestures%3A%7B%7D%2Crecognizers%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20Finds%20the%20element%20rendered%20on%20the%20screen%20at%20the%20provided%20coordinates.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Similar%20to%20%60document.elementFromPoint%60%2C%20but%20pierces%20through%0A%20%20%20%20%20*%20shadow%20roots.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%20Horizontal%20pixel%20coordinate%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%20Vertical%20pixel%20coordinate%0A%20%20%20%20%20*%20%40return%20%7BElement%7D%20Returns%20the%20deepest%20shadowRoot%20inclusive%20element%0A%20%20%20%20%20*%20found%20at%20the%20screen%20position%20given.%0A%20%20%20%20%20*%2FdeepTargetFind%3Afunction%20deepTargetFind(x%2Cy)%7Bvar%20node%3Ddocument.elementFromPoint(x%2Cy)%3Bvar%20next%3Dnode%3B%2F%2F%20this%20code%20path%20is%20only%20taken%20when%20native%20ShadowDOM%20is%20used%0A%2F%2F%20if%20there%20is%20a%20shadowroot%2C%20it%20may%20have%20a%20node%20at%20x%2Fy%0A%2F%2F%20if%20there%20is%20not%20a%20shadowroot%2C%20exit%20the%20loop%0Awhile(next%26%26next.shadowRoot%26%26!window.ShadyDOM)%7B%2F%2F%20if%20there%20is%20a%20node%20at%20x%2Fy%20in%20the%20shadowroot%2C%20look%20deeper%0Avar%20oldNext%3Dnext%3Bnext%3Dnext.shadowRoot.elementFromPoint(x%2Cy)%3B%2F%2F%20on%20Safari%2C%20elementFromPoint%20may%20return%20the%20shadowRoot%20host%0Aif(oldNext%3D%3D%3Dnext)%7Bbreak%3B%7Dif(next)%7Bnode%3Dnext%3B%7D%7Dreturn%20node%3B%7D%2C%2F**%0A%20%20%20%20%20*%20a%20cheaper%20check%20than%20ev.composedPath()%5B0%5D%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7BEventTarget%7D%20Returns%20the%20event%20target.%0A%20%20%20%20%20*%2F_findOriginalTarget%3Afunction%20_findOriginalTarget(ev)%7B%2F%2F%20shadowdom%0Aif(ev.composedPath)%7Bvar%20targets%3D%2F**%20%40type%20%7B!Array%3C!EventTarget%3E%7D%20*%2Fev.composedPath()%3B%2F%2F%20It%20shouldn't%20be%2C%20but%20sometimes%20targets%20is%20empty%20(window%20on%20Safari).%0Areturn%20targets.length%3E0%3Ftargets%5B0%5D%3Aev.target%3B%7D%2F%2F%20shadydom%0Areturn%20ev.target%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_handleNative%3Afunction%20_handleNative(ev)%7Bvar%20handled%3Dvoid%200%3Bvar%20type%3Dev.type%3Bvar%20node%3Dev.currentTarget%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(!gobj)%7Breturn%3B%7Dvar%20gs%3Dgobj%5Btype%5D%3Bif(!gs)%7Breturn%3B%7Dif(!ev%5BHANDLED_OBJ%5D)%7Bev%5BHANDLED_OBJ%5D%3D%7B%7D%3Bif(type.slice(0%2C5)%3D%3D%3D'touch')%7Bev%3D%2F**%20%40type%20%7BTouchEvent%7D%20*%2Fev%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Avar%20t%3Dev.changedTouches%5B0%5D%3Bif(type%3D%3D%3D'touchstart')%7B%2F%2F%20only%20handle%20the%20first%20finger%0Aif(ev.touches.length%3D%3D%3D1)%7BPOINTERSTATE.touch.id%3Dt.identifier%3B%7D%7Dif(POINTERSTATE.touch.id!%3D%3Dt.identifier)%7Breturn%3B%7Dif(!HAS_NATIVE_TA)%7Bif(type%3D%3D%3D'touchstart'%7C%7Ctype%3D%3D%3D'touchmove')%7BGestures._handleTouchAction(ev)%3B%7D%7D%7D%7Dhandled%3Dev%5BHANDLED_OBJ%5D%3B%2F%2F%20used%20to%20ignore%20synthetic%20mouse%20events%0Aif(handled.skip)%7Breturn%3B%7D%2F%2F%20reset%20recognizer%20state%0Afor(var%20i%3D0%2Cr%3Bi%3CGestures.recognizers.length%3Bi%2B%2B)%7Br%3DGestures.recognizers%5Bi%5D%3Bif(gs%5Br.name%5D%26%26!handled%5Br.name%5D)%7Bif(r.flow%26%26r.flow.start.indexOf(ev.type)%3E-1%26%26r.reset)%7Br.reset()%3B%7D%7D%7D%2F%2F%20enforce%20gesture%20recognizer%20order%0Afor(var%20_i%3D0%2C_r%3B_i%3CGestures.recognizers.length%3B_i%2B%2B)%7B_r%3DGestures.recognizers%5B_i%5D%3Bif(gs%5B_r.name%5D%26%26!handled%5B_r.name%5D)%7Bhandled%5B_r.name%5D%3Dtrue%3B_r%5Btype%5D(ev)%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_handleTouchAction%3Afunction%20_handleTouchAction(ev)%7Bvar%20t%3Dev.changedTouches%5B0%5D%3Bvar%20type%3Dev.type%3Bif(type%3D%3D%3D'touchstart')%7BPOINTERSTATE.touch.x%3Dt.clientX%3BPOINTERSTATE.touch.y%3Dt.clientY%3BPOINTERSTATE.touch.scrollDecided%3Dfalse%3B%7Delse%20if(type%3D%3D%3D'touchmove')%7Bif(POINTERSTATE.touch.scrollDecided)%7Breturn%3B%7DPOINTERSTATE.touch.scrollDecided%3Dtrue%3Bvar%20ta%3DfirstTouchAction(ev)%3Bvar%20prevent%3Dfalse%3Bvar%20dx%3DMath.abs(POINTERSTATE.touch.x-t.clientX)%3Bvar%20dy%3DMath.abs(POINTERSTATE.touch.y-t.clientY)%3Bif(!ev.cancelable)%7B%2F%2F%20scrolling%20is%20happening%0A%7Delse%20if(ta%3D%3D%3D'none')%7Bprevent%3Dtrue%3B%7Delse%20if(ta%3D%3D%3D'pan-x')%7Bprevent%3Ddy%3Edx%3B%7Delse%20if(ta%3D%3D%3D'pan-y')%7Bprevent%3Ddx%3Edy%3B%7Dif(prevent)%7Bev.preventDefault()%3B%7Delse%7BGestures.prevent('track')%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Adds%20an%20event%20listener%20to%20a%20node%20for%20the%20given%20gesture%20type.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20listener%20on%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Gesture%20type%3A%20%60down%60%2C%20%60up%60%2C%20%60track%60%2C%20or%20%60tap%60%0A%20%20%20%20%20*%20%40param%20%7B!function(!Event)%3Avoid%7D%20handler%20Event%20listener%20function%20to%20call%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20a%20gesture%20event%20listener%20was%20added.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2FaddListener%3Afunction%20addListener(node%2CevType%2Chandler)%7Bif(this.gestures%5BevType%5D)%7Bthis._add(node%2CevType%2Chandler)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Removes%20an%20event%20listener%20from%20a%20node%20for%20the%20given%20gesture%20type.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20listener%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Gesture%20type%3A%20%60down%60%2C%20%60up%60%2C%20%60track%60%2C%20or%20%60tap%60%0A%20%20%20%20%20*%20%40param%20%7B!function(!Event)%3Avoid%7D%20handler%20Event%20listener%20function%20previously%20passed%20to%0A%20%20%20%20%20*%20%20%60addListener%60.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20a%20gesture%20event%20listener%20was%20removed.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2FremoveListener%3Afunction%20removeListener(node%2CevType%2Chandler)%7Bif(this.gestures%5BevType%5D)%7Bthis._remove(node%2CevType%2Chandler)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2C%2F**%0A%20%20%20%20%20*%20automate%20the%20event%20listeners%20for%20the%20native%20events%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20node%20Node%20on%20which%20to%20add%20the%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Event%20type%20to%20add.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%7D%20handler%20Event%20handler%20function.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_add%3Afunction%20_add(node%2CevType%2Chandler)%7Bvar%20recognizer%3Dthis.gestures%5BevType%5D%3Bvar%20deps%3Drecognizer.deps%3Bvar%20name%3Drecognizer.name%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(!gobj)%7Bnode%5BGESTURE_KEY%5D%3Dgobj%3D%7B%7D%3B%7Dfor(var%20i%3D0%2Cdep%2Cgd%3Bi%3Cdeps.length%3Bi%2B%2B)%7Bdep%3Ddeps%5Bi%5D%3B%2F%2F%20don't%20add%20mouse%20handlers%20on%20iOS%20because%20they%20cause%20gray%20selection%20overlays%0Aif(IS_TOUCH_ONLY%26%26isMouseEvent(dep)%26%26dep!%3D%3D'click')%7Bcontinue%3B%7Dgd%3Dgobj%5Bdep%5D%3Bif(!gd)%7Bgobj%5Bdep%5D%3Dgd%3D%7B_count%3A0%7D%3B%7Dif(gd._count%3D%3D%3D0)%7Bnode.addEventListener(dep%2Cthis._handleNative%2CPASSIVE_TOUCH(dep))%3B%7Dgd%5Bname%5D%3D(gd%5Bname%5D%7C%7C0)%2B1%3Bgd._count%3D(gd._count%7C%7C0)%2B1%3B%7Dnode.addEventListener(evType%2Chandler)%3Bif(recognizer.touchAction)%7Bthis.setTouchAction(node%2Crecognizer.touchAction)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20automate%20event%20listener%20removal%20for%20native%20events%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20node%20Node%20on%20which%20to%20remove%20the%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Event%20type%20to%20remove.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(Event%3F)%7D%20handler%20Event%20handler%20function.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_remove%3Afunction%20_remove(node%2CevType%2Chandler)%7Bvar%20recognizer%3Dthis.gestures%5BevType%5D%3Bvar%20deps%3Drecognizer.deps%3Bvar%20name%3Drecognizer.name%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(gobj)%7Bfor(var%20i%3D0%2Cdep%2Cgd%3Bi%3Cdeps.length%3Bi%2B%2B)%7Bdep%3Ddeps%5Bi%5D%3Bgd%3Dgobj%5Bdep%5D%3Bif(gd%26%26gd%5Bname%5D)%7Bgd%5Bname%5D%3D(gd%5Bname%5D%7C%7C1)-1%3Bgd._count%3D(gd._count%7C%7C1)-1%3Bif(gd._count%3D%3D%3D0)%7Bnode.removeEventListener(dep%2Cthis._handleNative%2CPASSIVE_TOUCH(dep))%3B%7D%7D%7D%7Dnode.removeEventListener(evType%2Chandler)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Registers%20a%20new%20gesture%20event%20recognizer%20for%20adding%20new%20custom%0A%20%20%20%20%20*%20gesture%20event%20types.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!GestureRecognizer%7D%20recog%20Gesture%20recognizer%20descriptor%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2Fregister%3Afunction%20register(recog)%7Bthis.recognizers.push(recog)%3Bfor(var%20i%3D0%3Bi%3Crecog.emits.length%3Bi%2B%2B)%7Bthis.gestures%5Brecog.emits%5Bi%5D%5D%3Drecog%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evName%20Event%20name.%0A%20%20%20%20%20*%20%40return%20%7BObject%7D%20Returns%20the%20gesture%20for%20the%20given%20event%20name.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_findRecognizerByEvent%3Afunction%20_findRecognizerByEvent(evName)%7Bfor(var%20i%3D0%2Cr%3Bi%3Cthis.recognizers.length%3Bi%2B%2B)%7Br%3Dthis.recognizers%5Bi%5D%3Bfor(var%20j%3D0%2Cn%3Bj%3Cr.emits.length%3Bj%2B%2B)%7Bn%3Dr.emits%5Bj%5D%3Bif(n%3D%3D%3DevName)%7Breturn%20r%3B%7D%7D%7Dreturn%20null%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Sets%20scrolling%20direction%20on%20node.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20value%20is%20checked%20on%20first%20move%2C%20thus%20it%20should%20be%20called%20prior%20to%0A%20%20%20%20%20*%20adding%20event%20listeners.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Element%7D%20node%20Node%20to%20set%20touch%20action%20setting%20on%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Touch%20action%20value%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FsetTouchAction%3Afunction%20setTouchAction(node%2Cvalue)%7Bif(HAS_NATIVE_TA)%7B%2F%2F%20NOTE%3A%20add%20touchAction%20async%20so%20that%20events%20can%20be%20added%20in%0A%2F%2F%20custom%20element%20constructors.%20Otherwise%20we%20run%20afoul%20of%20custom%0A%2F%2F%20elements%20restriction%20against%20settings%20attributes%20(style)%20in%20the%0A%2F%2F%20constructor.%0APolymer.Async.microTask.run(function()%7Bnode.style.touchAction%3Dvalue%3B%7D)%3B%7Dnode%5BTOUCH_ACTION%5D%3Dvalue%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Dispatches%20an%20event%20on%20the%20%60target%60%20element%20of%20%60type%60%20with%20the%20given%0A%20%20%20%20%20*%20%60detail%60.%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%20The%20element%20on%20which%20to%20fire%20an%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20The%20type%20of%20event%20to%20fire.%0A%20%20%20%20%20*%20%40param%20%7B!Object%3D%7D%20detail%20The%20detail%20object%20to%20populate%20on%20the%20event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(target%2Ctype%2Cdetail)%7Bvar%20ev%3Dnew%20Event(type%2C%7Bbubbles%3Atrue%2Ccancelable%3Atrue%2Ccomposed%3Atrue%7D)%3Bev.detail%3Ddetail%3Btarget.dispatchEvent(ev)%3B%2F%2F%20forward%20%60preventDefault%60%20in%20a%20clean%20way%0Aif(ev.defaultPrevented)%7Bvar%20preventer%3Ddetail.preventer%7C%7Cdetail.sourceEvent%3Bif(preventer%26%26preventer.preventDefault)%7Bpreventer.preventDefault()%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Prevents%20the%20dispatch%20and%20default%20action%20of%20the%20given%20event%20name.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evName%20Event%20name.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2Fprevent%3Afunction%20prevent(evName)%7Bvar%20recognizer%3Dthis._findRecognizerByEvent(evName)%3Bif(recognizer.info)%7Brecognizer.info.prevent%3Dtrue%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Reset%20the%202500ms%20timeout%20on%20processing%20mouse%20input%20after%20detecting%20touch%20input.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Touch%20inputs%20create%20synthesized%20mouse%20inputs%20anywhere%20from%200%20to%202000ms%20after%20the%20touch.%0A%20%20%20%20%20*%20This%20method%20should%20only%20be%20called%20during%20testing%20with%20simulated%20touch%20inputs.%0A%20%20%20%20%20*%20Calling%20this%20method%20in%20production%20may%20cause%20duplicate%20taps%20or%20other%20Gestures.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FresetMouseCanceller%3Afunction%20resetMouseCanceller()%7Bif(POINTERSTATE.mouse.mouseIgnoreJob)%7BPOINTERSTATE.mouse.mouseIgnoreJob.flush()%3B%7D%7D%7D%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2FGestures.register(%7Bname%3A'downup'%2Cdeps%3A%5B'mousedown'%2C'touchstart'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'mouseup'%2C'touchend'%5D%7D%2Cemits%3A%5B'down'%2C'up'%5D%2Cinfo%3A%7Bmovefn%3Anull%2Cupfn%3Anull%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7BuntrackDocument(this.info)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(!hasLeftMouseButton(e))%7Breturn%3B%7Dvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20self%3Dthis%3Bvar%20movefn%3Dfunction%20movefn(e)%7Bif(!hasLeftMouseButton(e))%7Bself._fire('up'%2Ct%2Ce)%3BuntrackDocument(self.info)%3B%7D%7D%3Bvar%20upfn%3Dfunction%20upfn(e)%7Bif(hasLeftMouseButton(e))%7Bself._fire('up'%2Ct%2Ce)%3B%7DuntrackDocument(self.info)%3B%7D%3BtrackDocument(this.info%2Cmovefn%2Cupfn)%3Bthis._fire('down'%2Ct%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bthis._fire('down'%2CGestures._findOriginalTarget(e)%2Ce.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bthis._fire('up'%2CGestures._findOriginalTarget(e)%2Ce.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20event%0A%20%20%20%20%20*%20%40param%20%7BFunction%7D%20preventer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(type%2Ctarget%2Cevent%2Cpreventer)%7BGestures._fire(target%2Ctype%2C%7Bx%3Aevent.clientX%2Cy%3Aevent.clientY%2CsourceEvent%3Aevent%2Cpreventer%3Apreventer%2Cprevent%3Afunction%20prevent(e)%7Breturn%20Gestures.prevent(e)%3B%7D%7D)%3B%7D%7D)%3BGestures.register(%7Bname%3A'track'%2CtouchAction%3A'none'%2Cdeps%3A%5B'mousedown'%2C'touchstart'%2C'touchmove'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'mouseup'%2C'touchend'%5D%7D%2Cemits%3A%5B'track'%5D%2Cinfo%3A%7Bx%3A0%2Cy%3A0%2Cstate%3A'start'%2Cstarted%3Afalse%2Cmoves%3A%5B%5D%2C%2F**%20%40this%20%7BGestureRecognizer%7D%20*%2FaddMove%3Afunction%20addMove(move)%7Bif(this.moves.length%3ETRACK_LENGTH)%7Bthis.moves.shift()%3B%7Dthis.moves.push(move)%3B%7D%2Cmovefn%3Anull%2Cupfn%3Anull%2Cprevent%3Afalse%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7Bthis.info.state%3D'start'%3Bthis.info.started%3Dfalse%3Bthis.info.moves%3D%5B%5D%3Bthis.info.x%3D0%3Bthis.info.y%3D0%3Bthis.info.prevent%3Dfalse%3BuntrackDocument(this.info)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%0A%20%20%20%20%20*%2FhasMovedEnough%3Afunction%20hasMovedEnough(x%2Cy)%7Bif(this.info.prevent)%7Breturn%20false%3B%7Dif(this.info.started)%7Breturn%20true%3B%7Dvar%20dx%3DMath.abs(this.info.x-x)%3Bvar%20dy%3DMath.abs(this.info.y-y)%3Breturn%20dx%3E%3DTRACK_DISTANCE%7C%7Cdy%3E%3DTRACK_DISTANCE%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(!hasLeftMouseButton(e))%7Breturn%3B%7Dvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20self%3Dthis%3Bvar%20movefn%3Dfunction%20movefn(e)%7Bvar%20x%3De.clientX%2Cy%3De.clientY%3Bif(self.hasMovedEnough(x%2Cy))%7B%2F%2F%20first%20move%20is%20'start'%2C%20subsequent%20moves%20are%20'move'%2C%20mouseup%20is%20'end'%0Aself.info.state%3Dself.info.started%3Fe.type%3D%3D%3D'mouseup'%3F'end'%3A'track'%3A'start'%3Bif(self.info.state%3D%3D%3D'start')%7B%2F%2F%20if%20and%20only%20if%20tracking%2C%20always%20prevent%20tap%0AGestures.prevent('tap')%3B%7Dself.info.addMove(%7Bx%3Ax%2Cy%3Ay%7D)%3Bif(!hasLeftMouseButton(e))%7B%2F%2F%20always%20_fire%20%22end%22%0Aself.info.state%3D'end'%3BuntrackDocument(self.info)%3B%7Dself._fire(t%2Ce)%3Bself.info.started%3Dtrue%3B%7D%7D%3Bvar%20upfn%3Dfunction%20upfn(e)%7Bif(self.info.started)%7Bmovefn(e)%3B%7D%2F%2F%20remove%20the%20temporary%20listeners%0AuntrackDocument(self.info)%3B%7D%3B%2F%2F%20add%20temporary%20document%20listeners%20as%20mouse%20retargets%0AtrackDocument(this.info%2Cmovefn%2Cupfn)%3Bthis.info.x%3De.clientX%3Bthis.info.y%3De.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bvar%20ct%3De.changedTouches%5B0%5D%3Bthis.info.x%3Dct.clientX%3Bthis.info.y%3Dct.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchmove%3Afunction%20touchmove(e)%7Bvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20ct%3De.changedTouches%5B0%5D%3Bvar%20x%3Dct.clientX%2Cy%3Dct.clientY%3Bif(this.hasMovedEnough(x%2Cy))%7Bif(this.info.state%3D%3D%3D'start')%7B%2F%2F%20if%20and%20only%20if%20tracking%2C%20always%20prevent%20tap%0AGestures.prevent('tap')%3B%7Dthis.info.addMove(%7Bx%3Ax%2Cy%3Ay%7D)%3Bthis._fire(t%2Cct)%3Bthis.info.state%3D'track'%3Bthis.info.started%3Dtrue%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20ct%3De.changedTouches%5B0%5D%3B%2F%2F%20only%20trackend%20if%20track%20was%20started%20and%20not%20aborted%0Aif(this.info.started)%7B%2F%2F%20reset%20started%20state%20on%20up%0Athis.info.state%3D'end'%3Bthis.info.addMove(%7Bx%3Act.clientX%2Cy%3Act.clientY%7D)%3Bthis._fire(t%2Cct%2Ce)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BTouch%7D%20touch%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(target%2Ctouch)%7Bvar%20secondlast%3Dthis.info.moves%5Bthis.info.moves.length-2%5D%3Bvar%20lastmove%3Dthis.info.moves%5Bthis.info.moves.length-1%5D%3Bvar%20dx%3Dlastmove.x-this.info.x%3Bvar%20dy%3Dlastmove.y-this.info.y%3Bvar%20ddx%3Dvoid%200%2Cddy%3D0%3Bif(secondlast)%7Bddx%3Dlastmove.x-secondlast.x%3Bddy%3Dlastmove.y-secondlast.y%3B%7DGestures._fire(target%2C'track'%2C%7Bstate%3Athis.info.state%2Cx%3Atouch.clientX%2Cy%3Atouch.clientY%2Cdx%3Adx%2Cdy%3Ady%2Cddx%3Addx%2Cddy%3Addy%2CsourceEvent%3Atouch%2Chover%3Afunction%20hover()%7Breturn%20Gestures.deepTargetFind(touch.clientX%2Ctouch.clientY)%3B%7D%7D)%3B%7D%7D)%3BGestures.register(%7Bname%3A'tap'%2Cdeps%3A%5B'mousedown'%2C'click'%2C'touchstart'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'click'%2C'touchend'%5D%7D%2Cemits%3A%5B'tap'%5D%2Cinfo%3A%7Bx%3ANaN%2Cy%3ANaN%2Cprevent%3Afalse%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7Bthis.info.x%3DNaN%3Bthis.info.y%3DNaN%3Bthis.info.prevent%3Dfalse%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fsave%3Afunction%20save(e)%7Bthis.info.x%3De.clientX%3Bthis.info.y%3De.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(hasLeftMouseButton(e))%7Bthis.save(e)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fclick%3Afunction%20click(e)%7Bif(hasLeftMouseButton(e))%7Bthis.forward(e)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bthis.save(e.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bthis.forward(e.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BEvent%20%7C%20Touch%7D%20e%0A%20%20%20%20%20*%20%40param%20%7BEvent%3D%7D%20preventer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fforward%3Afunction%20forward(e%2Cpreventer)%7Bvar%20dx%3DMath.abs(e.clientX-this.info.x)%3Bvar%20dy%3DMath.abs(e.clientY-this.info.y)%3B%2F%2F%20find%20original%20target%20from%20%60preventer%60%20for%20TouchEvents%2C%20or%20%60e%60%20for%20MouseEvents%0Avar%20t%3DGestures._findOriginalTarget(%2F**%20%40type%20%7BEvent%7D%20*%2Fpreventer%7C%7Ce)%3Bif(!t%7C%7CcanBeDisabled%5B%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Ft.localName%5D%26%26t.hasAttribute('disabled'))%7Breturn%3B%7D%2F%2F%20dx%2Cdy%20can%20be%20NaN%20if%20%60click%60%20has%20been%20simulated%20and%20there%20was%20no%20%60down%60%20for%20%60start%60%0Aif(isNaN(dx)%7C%7CisNaN(dy)%7C%7Cdx%3C%3DTAP_DISTANCE%26%26dy%3C%3DTAP_DISTANCE%7C%7CisSyntheticClick(e))%7B%2F%2F%20prevent%20taps%20from%20being%20generated%20if%20an%20event%20has%20canceled%20them%0Aif(!this.info.prevent)%7BGestures._fire(t%2C'tap'%2C%7Bx%3Ae.clientX%2Cy%3Ae.clientY%2CsourceEvent%3Ae%2Cpreventer%3Apreventer%7D)%3B%7D%7D%7D%7D)%3B%2F*%20eslint-enable%20valid-jsdoc%20*%2F%2F**%20%40deprecated%20*%2FGestures.findOriginalTarget%3DGestures._findOriginalTarget%3B%2F**%20%40deprecated%20*%2FGestures.add%3DGestures.addListener%3B%2F**%20%40deprecated%20*%2FGestures.remove%3DGestures.removeListener%3BPolymer.Gestures%3DGestures%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fgestures.html.js%0A",
            "resourceBytes": 26851,
            "encodedBytes": 0,
            "unusedBytes": 14717
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20%40const%20%7BPolymer.Gestures%7D%0A%20%20%20*%2Fvar%20gestures%3DPolymer.Gestures%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20API%20for%20adding%20Polymer's%20cross-platform%0A%20%20%20*%20gesture%20events%20to%20nodes.%0A%20%20%20*%0A%20%20%20*%20The%20API%20is%20designed%20to%20be%20compatible%20with%20override%20points%20implemented%0A%20%20%20*%20in%20%60Polymer.TemplateStamp%60%20such%20that%20declarative%20event%20listeners%20in%0A%20%20%20*%20templates%20will%20support%20gesture%20events%20when%20this%20mixin%20is%20applied%20along%20with%0A%20%20%20*%20%60Polymer.TemplateStamp%60.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20API%20for%20adding%20Polymer's%20cross-platform%0A%20%20%20*%20gesture%20events%20to%20nodes%0A%20%20%20*%2FPolymer.GestureEventListeners%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_GestureEventListeners%7D%0A%20%20%20%20%20*%2Fvar%20GestureEventListeners%3Dfunction(_superClass)%7B_inherits(GestureEventListeners%2C_superClass)%3Bfunction%20GestureEventListeners()%7B_classCallCheck(this%2CGestureEventListeners)%3Breturn%20_possibleConstructorReturn(this%2C(GestureEventListeners.__proto__%7C%7CObject.getPrototypeOf(GestureEventListeners)).apply(this%2Carguments))%3B%7D_createClass(GestureEventListeners%2C%5B%7Bkey%3A'_addEventListenerToNode'%2C%2F**%0A%20%20%20%20%20%20%20*%20Add%20the%20event%20listener%20to%20the%20node%20if%20it%20is%20a%20gestures%20event.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bif(!gestures.addListener(node%2CeventName%2Chandler))%7B_get(GestureEventListeners.prototype.__proto__%7C%7CObject.getPrototypeOf(GestureEventListeners.prototype)%2C'_addEventListenerToNode'%2Cthis).call(this%2Cnode%2CeventName%2Chandler)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Remove%20the%20event%20listener%20to%20the%20node%20if%20it%20is%20a%20gestures%20event.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20event%20listener%20from%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeEventListenerFromNode'%2Cvalue%3Afunction%20_removeEventListenerFromNode(node%2CeventName%2Chandler)%7Bif(!gestures.removeListener(node%2CeventName%2Chandler))%7B_get(GestureEventListeners.prototype.__proto__%7C%7CObject.getPrototypeOf(GestureEventListeners.prototype)%2C'_removeEventListenerFromNode'%2Cthis).call(this%2Cnode%2CeventName%2Chandler)%3B%7D%7D%7D%5D)%3Breturn%20GestureEventListeners%3B%7D(superClass)%3Breturn%20GestureEventListeners%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fgesture-event-listeners.html.js%0A",
            "resourceBytes": 4429,
            "encodedBytes": 0,
            "unusedBytes": 2495
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20HOST_DIR%3D%2F%3Ahost%5C(%3Adir%5C((ltr%7Crtl)%5C)%5C)%2Fg%3Bvar%20HOST_DIR_REPLACMENT%3D'%3Ahost(%5Bdir%3D%22%241%22%5D)'%3Bvar%20EL_DIR%3D%2F(%5B%5Cs%5Cw-%23%5C.%5C%5B%5C%5D%5C*%5D*)%3Adir%5C((ltr%7Crtl)%5C)%2Fg%3Bvar%20EL_DIR_REPLACMENT%3D'%3Ahost(%5Bdir%3D%22%242%22%5D)%20%241'%3Bvar%20DIR_CHECK%3D%2F%3Adir%5C((%3F%3Altr%7Crtl)%5C)%2F%3Bvar%20SHIM_SHADOW%3DBoolean(window%5B'ShadyDOM'%5D%26%26window%5B'ShadyDOM'%5D%5B'inUse'%5D)%3B%2F**%0A%20%20%20%20%20*%20%40type%20%7B!Array%3C!Polymer_DirMixin%3E%7D%0A%20%20%20%20%20*%2Fvar%20DIR_INSTANCES%3D%5B%5D%3B%2F**%20%40type%20%7BMutationObserver%7D%20*%2Fvar%20observer%3Dnull%3Bvar%20DOCUMENT_DIR%3D''%3Bfunction%20getRTL()%7BDOCUMENT_DIR%3Ddocument.documentElement.getAttribute('dir')%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Polymer_DirMixin%7D%20instance%20Instance%20to%20set%20RTL%20status%20on%0A%20%20%20%20%20*%2Ffunction%20setRTL(instance)%7Bif(!instance.__autoDirOptOut)%7Bvar%20el%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finstance%3Bel.setAttribute('dir'%2CDOCUMENT_DIR)%3B%7D%7Dfunction%20updateDirection()%7BgetRTL()%3BDOCUMENT_DIR%3Ddocument.documentElement.getAttribute('dir')%3Bfor(var%20i%3D0%3Bi%3CDIR_INSTANCES.length%3Bi%2B%2B)%7BsetRTL(DIR_INSTANCES%5Bi%5D)%3B%7D%7Dfunction%20takeRecords()%7Bif(observer%26%26observer.takeRecords().length)%7BupdateDirection()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Element%20class%20mixin%20that%20allows%20elements%20to%20use%20the%20%60%3Adir%60%20CSS%20Selector%20to%20have%0A%20%20%20%20%20*%20text%20direction%20specific%20styling.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20With%20this%20mixin%2C%20any%20stylesheet%20provided%20in%20the%20template%20will%20transform%20%60%3Adir%60%20into%0A%20%20%20%20%20*%20%60%3Ahost(%5Bdir%5D)%60%20and%20sync%20direction%20with%20the%20page%20via%20the%20element's%20%60dir%60%20attribute.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Elements%20can%20opt%20out%20of%20the%20global%20page%20text%20direction%20by%20setting%20the%20%60dir%60%20attribute%0A%20%20%20%20%20*%20directly%20in%20%60ready()%60%20or%20in%20HTML.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Caveats%3A%0A%20%20%20%20%20*%20-%20Applications%20must%20set%20%60%3Chtml%20dir%3D%22ltr%22%3E%60%20or%20%60%3Chtml%20dir%3D%22rtl%22%3E%60%20to%20sync%20direction%0A%20%20%20%20%20*%20-%20Automatic%20left-to-right%20or%20right-to-left%20styling%20is%20sync'd%20with%20the%20%60%3Chtml%3E%60%20element%20only.%0A%20%20%20%20%20*%20-%20Changing%20%60dir%60%20at%20runtime%20is%20supported.%0A%20%20%20%20%20*%20-%20Opting%20out%20of%20the%20global%20direction%20styling%20is%20permanent%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40mixinFunction%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%2FPolymer.DirMixin%3DPolymer.dedupingMixin(function(base)%7Bif(!SHIM_SHADOW)%7Bif(!observer)%7BgetRTL()%3Bobserver%3Dnew%20MutationObserver(updateDirection)%3Bobserver.observe(document.documentElement%2C%7Battributes%3Atrue%2CattributeFilter%3A%5B'dir'%5D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fvar%20elementBase%3DPolymer.PropertyAccessors(base)%3B%2F**%0A%20%20%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_DirMixin%7D%0A%20%20%20%20%20%20%20*%2Fvar%20Dir%3Dfunction(_elementBase)%7B_inherits(Dir%2C_elementBase)%3B_createClass(Dir%2Cnull%2C%5B%7Bkey%3A'_processStyleText'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_processStyleText(cssText%2CbaseURI)%7BcssText%3D_get(Dir.__proto__%7C%7CObject.getPrototypeOf(Dir)%2C'_processStyleText'%2Cthis).call(this%2CcssText%2CbaseURI)%3Bif(!SHIM_SHADOW%26%26DIR_CHECK.test(cssText))%7BcssText%3Dthis._replaceDirInCssText(cssText)%3Bthis.__activateDir%3Dtrue%3B%7Dreturn%20cssText%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Replace%20%60%3Adir%60%20in%20the%20given%20CSS%20text%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20CSS%20text%20to%20replace%20DIR%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Modified%20CSS%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_replaceDirInCssText'%2Cvalue%3Afunction%20_replaceDirInCssText(text)%7Bvar%20replacedText%3Dtext%3BreplacedText%3DreplacedText.replace(HOST_DIR%2CHOST_DIR_REPLACMENT)%3BreplacedText%3DreplacedText.replace(EL_DIR%2CEL_DIR_REPLACMENT)%3Breturn%20replacedText%3B%7D%7D%5D)%3Bfunction%20Dir()%7B_classCallCheck(this%2CDir)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(Dir.__proto__%7C%7CObject.getPrototypeOf(Dir)).call(this))%3B_this.__autoDirOptOut%3Dfalse%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20doesn't%20understand%20that%20%60this%60%20is%20an%20HTMLElement%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F_createClass(Dir%2C%5B%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'ready'%2Cthis).call(this)%3Bthis.__autoDirOptOut%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis.hasAttribute('dir')%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20If%20it%20exists%20on%20elementBase%2C%20it%20can%20be%20super'd%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bif(elementBase.prototype.connectedCallback)%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7Dif(this.constructor.__activateDir)%7BtakeRecords()%3BDIR_INSTANCES.push(this)%3BsetRTL(this)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20If%20it%20exists%20on%20elementBase%2C%20it%20can%20be%20super'd%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bif(elementBase.prototype.disconnectedCallback)%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3B%7Dif(this.constructor.__activateDir)%7Bvar%20idx%3DDIR_INSTANCES.indexOf(this)%3Bif(idx%3E-1)%7BDIR_INSTANCES.splice(idx%2C1)%3B%7D%7D%7D%7D%5D)%3Breturn%20Dir%3B%7D(elementBase)%3BDir.__activateDir%3Dfalse%3Breturn%20Dir%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fdir-mixin.html.js%0A",
            "resourceBytes": 6777,
            "encodedBytes": 0,
            "unusedBytes": 3525
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20run%20a%20callback%20when%20HTMLImports%20are%20ready%20or%20immediately%20if%0A%2F%2F%20this%20api%20is%20not%20available.%0Afunction%20whenImportsReady(cb)%7Bif(window.HTMLImports)%7BHTMLImports.whenReady(cb)%3B%7Delse%7Bcb()%3B%7D%7D%2F**%0A%20%20%20*%20Convenience%20method%20for%20importing%20an%20HTML%20document%20imperatively.%0A%20%20%20*%0A%20%20%20*%20This%20method%20creates%20a%20new%20%60%3Clink%20rel%3D%22import%22%3E%60%20element%20with%0A%20%20%20*%20the%20provided%20URL%20and%20appends%20it%20to%20the%20document%20to%20start%20loading.%0A%20%20%20*%20In%20the%20%60onload%60%20callback%2C%20the%20%60import%60%20property%20of%20the%20%60link%60%0A%20%20%20*%20element%20will%20contain%20the%20imported%20document%20contents.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bstring%7D%20href%20URL%20to%20document%20to%20load.%0A%20%20%20*%20%40param%20%7B%3Ffunction(!Event)%3Avoid%3D%7D%20onload%20Callback%20to%20notify%20when%20an%20import%20successfully%0A%20%20%20*%20%20%20loaded.%0A%20%20%20*%20%40param%20%7B%3Ffunction(!ErrorEvent)%3Avoid%3D%7D%20onerror%20Callback%20to%20notify%20when%20an%20import%0A%20%20%20*%20%20%20unsuccessfully%20loaded.%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20optAsync%20True%20if%20the%20import%20should%20be%20loaded%20%60async%60.%0A%20%20%20*%20%20%20Defaults%20to%20%60false%60.%0A%20%20%20*%20%40return%20%7B!HTMLLinkElement%7D%20The%20link%20element%20for%20the%20URL%20to%20be%20loaded.%0A%20%20%20*%2FPolymer.importHref%3Dfunction(href%2Conload%2Conerror%2CoptAsync)%7Bvar%20link%3D%2F**%20%40type%20%7BHTMLLinkElement%7D%20*%2Fdocument.head.querySelector('link%5Bhref%3D%22'%2Bhref%2B'%22%5D%5Bimport-href%5D')%3Bif(!link)%7Blink%3D%2F**%20%40type%20%7BHTMLLinkElement%7D%20*%2Fdocument.createElement('link')%3Blink.rel%3D'import'%3Blink.href%3Dhref%3Blink.setAttribute('import-href'%2C'')%3B%7D%2F%2F%20always%20ensure%20link%20has%20%60async%60%20attribute%20if%20user%20specified%20one%2C%0A%2F%2F%20even%20if%20it%20was%20previously%20not%20async.%20This%20is%20considered%20less%20confusing.%0Aif(optAsync)%7Blink.setAttribute('async'%2C'')%3B%7D%2F%2F%20NOTE%3A%20the%20link%20may%20now%20be%20in%203%20states%3A%20(1)%20pending%20insertion%2C%0A%2F%2F%20(2)%20inflight%2C%20(3)%20already%20loaded.%20In%20each%20case%2C%20we%20need%20to%20add%0A%2F%2F%20event%20listeners%20to%20process%20callbacks.%0Avar%20cleanup%3Dfunction%20cleanup()%7Blink.removeEventListener('load'%2CloadListener)%3Blink.removeEventListener('error'%2CerrorListener)%3B%7D%3Bvar%20loadListener%3Dfunction%20loadListener(event)%7Bcleanup()%3B%2F%2F%20In%20case%20of%20a%20successful%20load%2C%20cache%20the%20load%20event%20on%20the%20link%20so%0A%2F%2F%20that%20it%20can%20be%20used%20to%20short-circuit%20this%20method%20in%20the%20future%20when%0A%2F%2F%20it%20is%20called%20with%20the%20same%20href%20param.%0Alink.__dynamicImportLoaded%3Dtrue%3Bif(onload)%7BwhenImportsReady(function()%7Bonload(event)%3B%7D)%3B%7D%7D%3Bvar%20errorListener%3Dfunction%20errorListener(event)%7Bcleanup()%3B%2F%2F%20In%20case%20of%20an%20error%2C%20remove%20the%20link%20from%20the%20document%20so%20that%20it%0A%2F%2F%20will%20be%20automatically%20created%20again%20the%20next%20time%20%60importHref%60%20is%0A%2F%2F%20called.%0Aif(link.parentNode)%7Blink.parentNode.removeChild(link)%3B%7Dif(onerror)%7BwhenImportsReady(function()%7Bonerror(event)%3B%7D)%3B%7D%7D%3Blink.addEventListener('load'%2CloadListener)%3Blink.addEventListener('error'%2CerrorListener)%3Bif(link.parentNode%3D%3Dnull)%7Bdocument.head.appendChild(link)%3B%2F%2F%20if%20the%20link%20already%20loaded%2C%20dispatch%20a%20fake%20load%20event%0A%2F%2F%20so%20that%20listeners%20are%20called%20and%20get%20a%20proper%20event%20argument.%0A%7Delse%20if(link.__dynamicImportLoaded)%7Blink.dispatchEvent(new%20Event('load'))%3B%7Dreturn%20link%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fimport-href.html.js%0A",
            "resourceBytes": 2990,
            "encodedBytes": 0,
            "unusedBytes": 1877
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20scheduled%3Dfalse%3Bvar%20beforeRenderQueue%3D%5B%5D%3Bvar%20afterRenderQueue%3D%5B%5D%3Bfunction%20schedule()%7Bscheduled%3Dtrue%3B%2F%2F%20before%20next%20render%0ArequestAnimationFrame(function()%7Bscheduled%3Dfalse%3BflushQueue(beforeRenderQueue)%3B%2F%2F%20after%20the%20render%0AsetTimeout(function()%7BrunQueue(afterRenderQueue)%3B%7D)%3B%7D)%3B%7Dfunction%20flushQueue(queue)%7Bwhile(queue.length)%7BcallMethod(queue.shift())%3B%7D%7Dfunction%20runQueue(queue)%7Bfor(var%20i%3D0%2Cl%3Dqueue.length%3Bi%3Cl%3Bi%2B%2B)%7BcallMethod(queue.shift())%3B%7D%7Dfunction%20callMethod(info)%7Bvar%20context%3Dinfo%5B0%5D%3Bvar%20callback%3Dinfo%5B1%5D%3Bvar%20args%3Dinfo%5B2%5D%3Btry%7Bcallback.apply(context%2Cargs)%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7Dfunction%20flush()%7Bwhile(beforeRenderQueue.length%7C%7CafterRenderQueue.length)%7BflushQueue(beforeRenderQueue)%3BflushQueue(afterRenderQueue)%3B%7Dscheduled%3Dfalse%3B%7D%2F**%0A%20%20%20*%20Module%20for%20scheduling%20flushable%20pre-render%20and%20post-render%20tasks.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20for%20scheduling%20flushable%20pre-render%20and%20post-render%20tasks.%0A%20%20%20*%2FPolymer.RenderStatus%3D%7B%2F**%0A%20%20%20%20%20*%20Enqueues%20a%20callback%20which%20will%20be%20run%20before%20the%20next%20render%2C%20at%0A%20%20%20%20%20*%20%60requestAnimationFrame%60%20timing.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20useful%20for%20enqueuing%20work%20that%20requires%20DOM%20measurement%2C%0A%20%20%20%20%20*%20since%20measurement%20may%20not%20be%20reliable%20in%20custom%20element%20callbacks%20before%0A%20%20%20%20%20*%20the%20first%20render%2C%20as%20well%20as%20for%20batching%20measurement%20tasks%20in%20general.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Tasks%20in%20this%20queue%20may%20be%20flushed%20by%20calling%20%60Polymer.RenderStatus.flush()%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20context%20Context%20object%20the%20callback%20function%20will%20be%20bound%20to%0A%20%20%20%20%20*%20%40param%20%7Bfunction(...*)%3Avoid%7D%20callback%20Callback%20function%0A%20%20%20%20%20*%20%40param%20%7B!Array%3D%7D%20args%20An%20array%20of%20arguments%20to%20call%20the%20callback%20function%20with%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FbeforeNextRender%3Afunction%20beforeNextRender(context%2Ccallback%2Cargs)%7Bif(!scheduled)%7Bschedule()%3B%7DbeforeRenderQueue.push(%5Bcontext%2Ccallback%2Cargs%5D)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Enqueues%20a%20callback%20which%20will%20be%20run%20after%20the%20next%20render%2C%20equivalent%0A%20%20%20%20%20*%20to%20one%20task%20(%60setTimeout%60)%20after%20the%20next%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20useful%20for%20tuning%20the%20first-render%20performance%20of%20an%0A%20%20%20%20%20*%20element%20or%20application%20by%20deferring%20non-critical%20work%20until%20after%20the%0A%20%20%20%20%20*%20first%20paint.%20%20Typical%20non-render-critical%20work%20may%20include%20adding%20UI%0A%20%20%20%20%20*%20event%20listeners%20and%20aria%20attributes.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20context%20Context%20object%20the%20callback%20function%20will%20be%20bound%20to%0A%20%20%20%20%20*%20%40param%20%7Bfunction(...*)%3Avoid%7D%20callback%20Callback%20function%0A%20%20%20%20%20*%20%40param%20%7B!Array%3D%7D%20args%20An%20array%20of%20arguments%20to%20call%20the%20callback%20function%20with%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FafterNextRender%3Afunction%20afterNextRender(context%2Ccallback%2Cargs)%7Bif(!scheduled)%7Bschedule()%3B%7DafterRenderQueue.push(%5Bcontext%2Ccallback%2Cargs%5D)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Flushes%20all%20%60beforeNextRender%60%20tasks%2C%20followed%20by%20all%20%60afterNextRender%60%0A%20%20%20%20%20*%20tasks.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fflush%3Aflush%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Frender-status.html.js%0A",
            "resourceBytes": 3121,
            "encodedBytes": 0,
            "unusedBytes": 937
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20unresolved%0Afunction%20resolve()%7Bdocument.body.removeAttribute('unresolved')%3B%7Dif(window.WebComponents)%7Bwindow.addEventListener('WebComponentsReady'%2Cresolve)%3B%7Delse%7Bif(document.readyState%3D%3D%3D'interactive'%7C%7Cdocument.readyState%3D%3D%3D'complete')%7Bresolve()%3B%7Delse%7Bwindow.addEventListener('DOMContentLoaded'%2Cresolve)%3B%7D%7D%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Funresolved.html.js%0A",
            "resourceBytes": 480,
            "encodedBytes": 0,
            "unusedBytes": 0
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bfunction%20newSplice(index%2Cremoved%2CaddedCount)%7Breturn%7Bindex%3Aindex%2Cremoved%3Aremoved%2CaddedCount%3AaddedCount%7D%3B%7Dvar%20EDIT_LEAVE%3D0%3Bvar%20EDIT_UPDATE%3D1%3Bvar%20EDIT_ADD%3D2%3Bvar%20EDIT_DELETE%3D3%3B%2F%2F%20Note%3A%20This%20function%20is%20*based*%20on%20the%20computation%20of%20the%20Levenshtein%0A%2F%2F%20%22edit%22%20distance.%20The%20one%20change%20is%20that%20%22updates%22%20are%20treated%20as%20two%0A%2F%2F%20edits%20-%20not%20one.%20With%20Array%20splices%2C%20an%20update%20is%20really%20a%20delete%0A%2F%2F%20followed%20by%20an%20add.%20By%20retaining%20this%2C%20we%20optimize%20for%20%22keeping%22%20the%0A%2F%2F%20maximum%20array%20items%20in%20the%20original%20array.%20For%20example%3A%0A%2F%2F%0A%2F%2F%20%20%20'xxxx123'%20-%3E%20'123yyyy'%0A%2F%2F%0A%2F%2F%20With%201-edit%20updates%2C%20the%20shortest%20path%20would%20be%20just%20to%20update%20all%20seven%0A%2F%2F%20characters.%20With%202-edit%20updates%2C%20we%20delete%204%2C%20leave%203%2C%20and%20add%204.%20This%0A%2F%2F%20leaves%20the%20substring%20'123'%20intact.%0Afunction%20calcEditDistances(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd)%7B%2F%2F%20%22Deletion%22%20columns%0Avar%20rowCount%3DoldEnd-oldStart%2B1%3Bvar%20columnCount%3DcurrentEnd-currentStart%2B1%3Bvar%20distances%3Dnew%20Array(rowCount)%3B%2F%2F%20%22Addition%22%20rows.%20Initialize%20null%20column.%0Afor(var%20i%3D0%3Bi%3CrowCount%3Bi%2B%2B)%7Bdistances%5Bi%5D%3Dnew%20Array(columnCount)%3Bdistances%5Bi%5D%5B0%5D%3Di%3B%7D%2F%2F%20Initialize%20null%20row%0Afor(var%20j%3D0%3Bj%3CcolumnCount%3Bj%2B%2B)%7Bdistances%5B0%5D%5Bj%5D%3Dj%3B%7Dfor(var%20_i%3D1%3B_i%3CrowCount%3B_i%2B%2B)%7Bfor(var%20_j%3D1%3B_j%3CcolumnCount%3B_j%2B%2B)%7Bif(equals(current%5BcurrentStart%2B_j-1%5D%2Cold%5BoldStart%2B_i-1%5D))distances%5B_i%5D%5B_j%5D%3Ddistances%5B_i-1%5D%5B_j-1%5D%3Belse%7Bvar%20north%3Ddistances%5B_i-1%5D%5B_j%5D%2B1%3Bvar%20west%3Ddistances%5B_i%5D%5B_j-1%5D%2B1%3Bdistances%5B_i%5D%5B_j%5D%3Dnorth%3Cwest%3Fnorth%3Awest%3B%7D%7D%7Dreturn%20distances%3B%7D%2F%2F%20This%20starts%20at%20the%20final%20weight%2C%20and%20walks%20%22backward%22%20by%20finding%0A%2F%2F%20the%20minimum%20previous%20weight%20recursively%20until%20the%20origin%20of%20the%20weight%0A%2F%2F%20matrix.%0Afunction%20spliceOperationsFromEditDistances(distances)%7Bvar%20i%3Ddistances.length-1%3Bvar%20j%3Ddistances%5B0%5D.length-1%3Bvar%20current%3Ddistances%5Bi%5D%5Bj%5D%3Bvar%20edits%3D%5B%5D%3Bwhile(i%3E0%7C%7Cj%3E0)%7Bif(i%3D%3D0)%7Bedits.push(EDIT_ADD)%3Bj--%3Bcontinue%3B%7Dif(j%3D%3D0)%7Bedits.push(EDIT_DELETE)%3Bi--%3Bcontinue%3B%7Dvar%20northWest%3Ddistances%5Bi-1%5D%5Bj-1%5D%3Bvar%20west%3Ddistances%5Bi-1%5D%5Bj%5D%3Bvar%20north%3Ddistances%5Bi%5D%5Bj-1%5D%3Bvar%20min%3Dvoid%200%3Bif(west%3Cnorth)min%3Dwest%3CnorthWest%3Fwest%3AnorthWest%3Belse%20min%3Dnorth%3CnorthWest%3Fnorth%3AnorthWest%3Bif(min%3D%3DnorthWest)%7Bif(northWest%3D%3Dcurrent)%7Bedits.push(EDIT_LEAVE)%3B%7Delse%7Bedits.push(EDIT_UPDATE)%3Bcurrent%3DnorthWest%3B%7Di--%3Bj--%3B%7Delse%20if(min%3D%3Dwest)%7Bedits.push(EDIT_DELETE)%3Bi--%3Bcurrent%3Dwest%3B%7Delse%7Bedits.push(EDIT_ADD)%3Bj--%3Bcurrent%3Dnorth%3B%7D%7Dedits.reverse()%3Breturn%20edits%3B%7D%2F**%0A%20%20%20*%20Splice%20Projection%20functions%3A%0A%20%20%20*%0A%20%20%20*%20A%20splice%20map%20is%20a%20representation%20of%20how%20a%20previous%20array%20of%20items%0A%20%20%20*%20was%20transformed%20into%20a%20new%20array%20of%20items.%20Conceptually%20it%20is%20a%20list%20of%0A%20%20%20*%20tuples%20of%0A%20%20%20*%0A%20%20%20*%20%20%20%3Cindex%2C%20removed%2C%20addedCount%3E%0A%20%20%20*%0A%20%20%20*%20which%20are%20kept%20in%20ascending%20index%20order%20of.%20The%20tuple%20represents%20that%20at%0A%20%20%20*%20the%20%7Cindex%7C%2C%20%7Cremoved%7C%20sequence%20of%20items%20were%20removed%2C%20and%20counting%20forward%0A%20%20%20*%20from%20%7Cindex%7C%2C%20%7CaddedCount%7C%20items%20were%20added.%0A%20%20%20*%2F%2F**%0A%20%20%20*%20Lacking%20individual%20splice%20mutation%20information%2C%20the%20minimal%20set%20of%0A%20%20%20*%20splices%20can%20be%20synthesized%20given%20the%20previous%20state%20and%20final%20state%20of%20an%0A%20%20%20*%20array.%20The%20basic%20approach%20is%20to%20calculate%20the%20edit%20distance%20matrix%20and%0A%20%20%20*%20choose%20the%20shortest%20path%20through%20it.%0A%20%20%20*%0A%20%20%20*%20Complexity%3A%20O(l%20*%20p)%0A%20%20%20*%20%20%20l%3A%20The%20length%20of%20the%20current%20array%0A%20%20%20*%20%20%20p%3A%20The%20length%20of%20the%20old%20array%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%7D%20current%20The%20current%20%22changed%22%20array%20for%20which%20to%0A%20%20%20*%20calculate%20splices.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20currentStart%20Starting%20index%20in%20the%20%60current%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20currentEnd%20Ending%20index%20in%20the%20%60current%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7B!Array%7D%20old%20The%20original%20%22unchanged%22%20array%20to%20compare%20%60current%60%0A%20%20%20*%20against%20to%20determine%20splices.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20oldStart%20Starting%20index%20in%20the%20%60old%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20oldEnd%20Ending%20index%20in%20the%20%60old%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20an%20array%20of%20splice%20record%20objects.%20Each%20of%20these%0A%20%20%20*%20contains%3A%20%60index%60%20the%20location%20where%20the%20splice%20occurred%3B%20%60removed%60%0A%20%20%20*%20the%20array%20of%20removed%20items%20from%20this%20location%3B%20%60addedCount%60%20the%20number%0A%20%20%20*%20of%20items%20added%20at%20this%20location.%0A%20%20%20*%2Ffunction%20calcSplices(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd)%7Bvar%20prefixCount%3D0%3Bvar%20suffixCount%3D0%3Bvar%20splice%3Dvoid%200%3Bvar%20minLength%3DMath.min(currentEnd-currentStart%2ColdEnd-oldStart)%3Bif(currentStart%3D%3D0%26%26oldStart%3D%3D0)prefixCount%3DsharedPrefix(current%2Cold%2CminLength)%3Bif(currentEnd%3D%3Dcurrent.length%26%26oldEnd%3D%3Dold.length)suffixCount%3DsharedSuffix(current%2Cold%2CminLength-prefixCount)%3BcurrentStart%2B%3DprefixCount%3BoldStart%2B%3DprefixCount%3BcurrentEnd-%3DsuffixCount%3BoldEnd-%3DsuffixCount%3Bif(currentEnd-currentStart%3D%3D0%26%26oldEnd-oldStart%3D%3D0)return%5B%5D%3Bif(currentStart%3D%3DcurrentEnd)%7Bsplice%3DnewSplice(currentStart%2C%5B%5D%2C0)%3Bwhile(oldStart%3ColdEnd)%7Bsplice.removed.push(old%5BoldStart%2B%2B%5D)%3B%7Dreturn%5Bsplice%5D%3B%7Delse%20if(oldStart%3D%3DoldEnd)return%5BnewSplice(currentStart%2C%5B%5D%2CcurrentEnd-currentStart)%5D%3Bvar%20ops%3DspliceOperationsFromEditDistances(calcEditDistances(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd))%3Bsplice%3Dundefined%3Bvar%20splices%3D%5B%5D%3Bvar%20index%3DcurrentStart%3Bvar%20oldIndex%3DoldStart%3Bfor(var%20i%3D0%3Bi%3Cops.length%3Bi%2B%2B)%7Bswitch(ops%5Bi%5D)%7Bcase%20EDIT_LEAVE%3Aif(splice)%7Bsplices.push(splice)%3Bsplice%3Dundefined%3B%7Dindex%2B%2B%3BoldIndex%2B%2B%3Bbreak%3Bcase%20EDIT_UPDATE%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.addedCount%2B%2B%3Bindex%2B%2B%3Bsplice.removed.push(old%5BoldIndex%5D)%3BoldIndex%2B%2B%3Bbreak%3Bcase%20EDIT_ADD%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.addedCount%2B%2B%3Bindex%2B%2B%3Bbreak%3Bcase%20EDIT_DELETE%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.removed.push(old%5BoldIndex%5D)%3BoldIndex%2B%2B%3Bbreak%3B%7D%7Dif(splice)%7Bsplices.push(splice)%3B%7Dreturn%20splices%3B%7Dfunction%20sharedPrefix(current%2Cold%2CsearchLength)%7Bfor(var%20i%3D0%3Bi%3CsearchLength%3Bi%2B%2B)%7Bif(!equals(current%5Bi%5D%2Cold%5Bi%5D))return%20i%3B%7Dreturn%20searchLength%3B%7Dfunction%20sharedSuffix(current%2Cold%2CsearchLength)%7Bvar%20index1%3Dcurrent.length%3Bvar%20index2%3Dold.length%3Bvar%20count%3D0%3Bwhile(count%3CsearchLength%26%26equals(current%5B--index1%5D%2Cold%5B--index2%5D))%7Bcount%2B%2B%3B%7Dreturn%20count%3B%7Dfunction%20calculateSplices(current%2Cprevious)%7Breturn%20calcSplices(current%2C0%2Ccurrent.length%2Cprevious%2C0%2Cprevious.length)%3B%7Dfunction%20equals(currentValue%2CpreviousValue)%7Breturn%20currentValue%3D%3D%3DpreviousValue%3B%7D%2F**%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20utilities%20for%20diffing%20arrays.%0A%20%20%20*%2FPolymer.ArraySplice%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20an%20array%20of%20splice%20records%20indicating%20the%20minimum%20edits%20required%0A%20%20%20%20%20*%20to%20transform%20the%20%60previous%60%20array%20into%20the%20%60current%60%20array.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Splice%20records%20are%20ordered%20by%20index%20and%20contain%20the%20following%20fields%3A%0A%20%20%20%20%20*%20-%20%60index%60%3A%20index%20where%20edit%20started%0A%20%20%20%20%20*%20-%20%60removed%60%3A%20array%20of%20removed%20items%20from%20this%20index%0A%20%20%20%20%20*%20-%20%60addedCount%60%3A%20number%20of%20items%20added%20at%20this%20index%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20function%20is%20based%20on%20the%20Levenshtein%20%22minimum%20edit%20distance%22%0A%20%20%20%20%20*%20algorithm.%20Note%20that%20updates%20are%20treated%20as%20removal%20followed%20by%20addition.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20worst-case%20time%20complexity%20of%20this%20algorithm%20is%20%60O(l%20*%20p)%60%0A%20%20%20%20%20*%20%20%20l%3A%20The%20length%20of%20the%20current%20array%0A%20%20%20%20%20*%20%20%20p%3A%20The%20length%20of%20the%20previous%20array%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20However%2C%20the%20worst-case%20complexity%20is%20reduced%20by%20an%20%60O(n)%60%20optimization%0A%20%20%20%20%20*%20to%20detect%20any%20shared%20prefix%20%26%20suffix%20between%20the%20two%20arrays%20and%20only%0A%20%20%20%20%20*%20perform%20the%20more%20expensive%20minimum%20edit%20distance%20calculation%20over%20the%0A%20%20%20%20%20*%20non-shared%20portions%20of%20the%20arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40function%0A%20%20%20%20%20*%20%40memberof%20Polymer.ArraySplice%0A%20%20%20%20%20*%20%40param%20%7B!Array%7D%20current%20The%20%22changed%22%20array%20for%20which%20splices%20will%20be%0A%20%20%20%20%20*%20calculated.%0A%20%20%20%20%20*%20%40param%20%7B!Array%7D%20previous%20The%20%22unchanged%22%20original%20array%20to%20compare%0A%20%20%20%20%20*%20%60current%60%20against%20to%20determine%20the%20splices.%0A%20%20%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20an%20array%20of%20splice%20record%20objects.%20Each%20of%20these%0A%20%20%20%20%20*%20contains%3A%20%60index%60%20the%20location%20where%20the%20splice%20occurred%3B%20%60removed%60%0A%20%20%20%20%20*%20the%20array%20of%20removed%20items%20from%20this%20location%3B%20%60addedCount%60%20the%20number%0A%20%20%20%20%20*%20of%20items%20added%20at%20this%20location.%0A%20%20%20%20%20*%2FcalculateSplices%3AcalculateSplices%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Farray-splice.html.js%0A",
            "resourceBytes": 7970,
            "encodedBytes": 0,
            "unusedBytes": 3520
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Returns%20true%20if%20%60node%60%20is%20a%20slot%20element%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20test.%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20given%20%60node%60%20is%20a%20slot%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20isSlot(node)%7Breturn%20node.localName%3D%3D%3D'slot'%3B%7D%2F**%0A%20%20%20*%20Class%20that%20listens%20for%20changes%20(additions%20or%20removals)%20to%0A%20%20%20*%20%22flattened%20nodes%22%20on%20a%20given%20%60node%60.%20The%20list%20of%20flattened%20nodes%20consists%0A%20%20%20*%20of%20a%20node's%20children%20and%2C%20for%20any%20children%20that%20are%20%60%3Cslot%3E%60%20elements%2C%0A%20%20%20*%20the%20expanded%20flattened%20list%20of%20%60assignedNodes%60.%0A%20%20%20*%20For%20example%2C%20if%20the%20observed%20node%20has%20children%20%60%3Ca%3E%3C%2Fa%3E%3Cslot%3E%3C%2Fslot%3E%3Cb%3E%3C%2Fb%3E%60%0A%20%20%20*%20and%20the%20%60%3Cslot%3E%60%20has%20one%20%60%3Cdiv%3E%60%20assigned%20to%20it%2C%20then%20the%20flattened%0A%20%20%20*%20nodes%20list%20is%20%60%3Ca%3E%3C%2Fa%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cb%3E%3C%2Fb%3E%60.%20If%20the%20%60%3Cslot%3E%60%20has%20other%0A%20%20%20*%20%60%3Cslot%3E%60%20elements%20assigned%20to%20it%2C%20these%20are%20flattened%20as%20well.%0A%20%20%20*%0A%20%20%20*%20The%20provided%20%60callback%60%20is%20called%20whenever%20any%20change%20to%20this%20list%0A%20%20%20*%20of%20flattened%20nodes%20occurs%2C%20where%20an%20addition%20or%20removal%20of%20a%20node%20is%0A%20%20%20*%20considered%20a%20change.%20The%20%60callback%60%20is%20called%20with%20one%20argument%2C%20an%20object%0A%20%20%20*%20containing%20an%20array%20of%20any%20%60addedNodes%60%20and%20%60removedNodes%60.%0A%20%20%20*%0A%20%20%20*%20Note%3A%20the%20callback%20is%20called%20asynchronous%20to%20any%20changes%0A%20%20%20*%20at%20a%20microtask%20checkpoint.%20This%20is%20because%20observation%20is%20performed%20using%0A%20%20%20*%20%60MutationObserver%60%20and%20the%20%60%3Cslot%3E%60%20element's%20%60slotchange%60%20event%20which%0A%20%20%20*%20are%20asynchronous.%0A%20%20%20*%0A%20%20%20*%20An%20example%3A%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20class%20TestSelfObserve%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20%20static%20get%20is()%20%7B%20return%20'test-self-observe'%3B%7D%0A%20%20%20*%20%20%20connectedCallback()%20%7B%0A%20%20%20*%20%20%20%20%20super.connectedCallback()%3B%0A%20%20%20*%20%20%20%20%20this._observer%20%3D%20new%20Polymer.FlattenedNodesObserver(this%2C%20(info)%20%3D%3E%20%7B%0A%20%20%20*%20%20%20%20%20%20%20this.info%20%3D%20info%3B%0A%20%20%20*%20%20%20%20%20%7D)%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%20%20disconnectedCallback()%20%7B%0A%20%20%20*%20%20%20%20%20super.disconnectedCallback()%3B%0A%20%20%20*%20%20%20%20%20this._observer.disconnect()%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%7D%0A%20%20%20*%20customElements.define(TestSelfObserve.is%2C%20TestSelfObserve)%3B%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Class%20that%20listens%20for%20changes%20(additions%20or%20removals)%20to%0A%20%20%20*%20%22flattened%20nodes%22%20on%20a%20given%20%60node%60.%0A%20%20%20*%2Fvar%20FlattenedNodesObserver%3Dfunction()%7B_createClass(FlattenedNodesObserver%2Cnull%2C%5B%7Bkey%3A'getFlattenedNodes'%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20list%20of%20flattened%20nodes%20for%20the%20given%20%60node%60.%0A%20%20%20%20%20*%20This%20list%20consists%20of%20a%20node's%20children%20and%2C%20for%20any%20children%0A%20%20%20%20%20*%20that%20are%20%60%3Cslot%3E%60%20elements%2C%20the%20expanded%20flattened%20list%20of%20%60assignedNodes%60.%0A%20%20%20%20%20*%20For%20example%2C%20if%20the%20observed%20node%20has%20children%20%60%3Ca%3E%3C%2Fa%3E%3Cslot%3E%3C%2Fslot%3E%3Cb%3E%3C%2Fb%3E%60%0A%20%20%20%20%20*%20and%20the%20%60%3Cslot%3E%60%20has%20one%20%60%3Cdiv%3E%60%20assigned%20to%20it%2C%20then%20the%20flattened%0A%20%20%20%20%20*%20nodes%20list%20is%20%60%3Ca%3E%3C%2Fa%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cb%3E%3C%2Fb%3E%60.%20If%20the%20%60%3Cslot%3E%60%20has%20other%0A%20%20%20%20%20*%20%60%3Cslot%3E%60%20elements%20assigned%20to%20it%2C%20these%20are%20flattened%20as%20well.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BHTMLElement%7CHTMLSlotElement%7D%20node%20The%20node%20for%20which%20to%20return%20the%20list%20of%20flattened%20nodes.%0A%20%20%20%20%20*%20%40return%20%7BArray%7D%20The%20list%20of%20flattened%20nodes%20for%20the%20given%20%60node%60.%0A%20%20%20%20*%2Fvalue%3Afunction%20getFlattenedNodes(node)%7Bif(isSlot(node))%7Bnode%3D%2F**%20%40type%20%7BHTMLSlotElement%7D%20*%2Fnode%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20node.assignedNodes(%7Bflatten%3Atrue%7D)%3B%7Delse%7Breturn%20Array.from(node.childNodes).map(function(node)%7Bif(isSlot(node))%7Bnode%3D%2F**%20%40type%20%7BHTMLSlotElement%7D%20*%2Fnode%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20node.assignedNodes(%7Bflatten%3Atrue%7D)%3B%7Delse%7Breturn%5Bnode%5D%3B%7D%7D).reduce(function(a%2Cb)%7Breturn%20a.concat(b)%3B%7D%2C%5B%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BElement%7D%20target%20Node%20on%20which%20to%20listen%20for%20changes.%0A%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!Element%2C%20%7B%20target%3A%20!Element%2C%20addedNodes%3A%20!Array%3C!Element%3E%2C%20removedNodes%3A%20!Array%3C!Element%3E%20%7D)%3Avoid%7D%20callback%20Function%20called%20when%20there%20are%20additions%0A%20%20%20%20%20*%20or%20removals%20from%20the%20target's%20list%20of%20flattened%20nodes.%0A%20%20%20%20*%2F%7D%5D)%3Bfunction%20FlattenedNodesObserver(target%2Ccallback)%7Bvar%20_this%3Dthis%3B_classCallCheck(this%2CFlattenedNodesObserver)%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BMutationObserver%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._shadyChildrenObserver%3Dnull%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BMutationObserver%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._nativeChildrenObserver%3Dnull%3Bthis._connected%3Dfalse%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BElement%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._target%3Dtarget%3Bthis.callback%3Dcallback%3Bthis._effectiveNodes%3D%5B%5D%3Bthis._observer%3Dnull%3Bthis._scheduled%3Dfalse%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7Bfunction()%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._boundSchedule%3Dfunction()%7B_this._schedule()%3B%7D%3Bthis.connect()%3Bthis._schedule()%3B%7D%2F**%0A%20%20%20%20%20*%20Activates%20an%20observer.%20This%20method%20is%20automatically%20called%20when%0A%20%20%20%20%20*%20a%20%60FlattenedNodesObserver%60%20is%20created.%20It%20should%20only%20be%20called%20to%0A%20%20%20%20%20*%20re-activate%20an%20observer%20that%20has%20been%20deactivated%20via%20the%20%60disconnect%60%20method.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(FlattenedNodesObserver%2C%5B%7Bkey%3A'connect'%2Cvalue%3Afunction%20connect()%7Bvar%20_this2%3Dthis%3Bif(isSlot(this._target))%7Bthis._listenSlots(%5Bthis._target%5D)%3B%7Delse%20if(this._target.children)%7Bthis._listenSlots(this._target.children)%3Bif(window.ShadyDOM)%7Bthis._shadyChildrenObserver%3DShadyDOM.observeChildren(this._target%2Cfunction(mutations)%7B_this2._processMutations(mutations)%3B%7D)%3B%7Delse%7Bthis._nativeChildrenObserver%3Dnew%20MutationObserver(function(mutations)%7B_this2._processMutations(mutations)%3B%7D)%3Bthis._nativeChildrenObserver.observe(this._target%2C%7BchildList%3Atrue%7D)%3B%7D%7Dthis._connected%3Dtrue%3B%7D%2F**%0A%20%20%20%20%20*%20Deactivates%20the%20flattened%20nodes%20observer.%20After%20calling%20this%20method%0A%20%20%20%20%20*%20the%20observer%20callback%20will%20not%20be%20called%20when%20changes%20to%20flattened%20nodes%0A%20%20%20%20%20*%20occur.%20The%20%60connect%60%20method%20may%20be%20subsequently%20called%20to%20reactivate%0A%20%20%20%20%20*%20the%20observer.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnect'%2Cvalue%3Afunction%20disconnect()%7Bif(isSlot(this._target))%7Bthis._unlistenSlots(%5Bthis._target%5D)%3B%7Delse%20if(this._target.children)%7Bthis._unlistenSlots(this._target.children)%3Bif(window.ShadyDOM%26%26this._shadyChildrenObserver)%7BShadyDOM.unobserveChildren(this._shadyChildrenObserver)%3Bthis._shadyChildrenObserver%3Dnull%3B%7Delse%20if(this._nativeChildrenObserver)%7Bthis._nativeChildrenObserver.disconnect()%3Bthis._nativeChildrenObserver%3Dnull%3B%7D%7Dthis._connected%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_schedule'%2Cvalue%3Afunction%20_schedule()%7Bvar%20_this3%3Dthis%3Bif(!this._scheduled)%7Bthis._scheduled%3Dtrue%3BPolymer.Async.microTask.run(function()%7Breturn%20_this3.flush()%3B%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%3CMutationRecord%3E%7D%20mutations%20Mutations%20signaled%20by%20the%20mutation%20observer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_processMutations'%2Cvalue%3Afunction%20_processMutations(mutations)%7Bthis._processSlotMutations(mutations)%3Bthis.flush()%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%3CMutationRecord%3E%7D%20mutations%20Mutations%20signaled%20by%20the%20mutation%20observer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_processSlotMutations'%2Cvalue%3Afunction%20_processSlotMutations(mutations)%7Bif(mutations)%7Bfor(var%20i%3D0%3Bi%3Cmutations.length%3Bi%2B%2B)%7Bvar%20mutation%3Dmutations%5Bi%5D%3Bif(mutation.addedNodes)%7Bthis._listenSlots(mutation.addedNodes)%3B%7Dif(mutation.removedNodes)%7Bthis._unlistenSlots(mutation.removedNodes)%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20Flushes%20the%20observer%20causing%20any%20pending%20changes%20to%20be%20immediately%0A%20%20%20%20%20*%20delivered%20the%20observer%20callback.%20By%20default%20these%20changes%20are%20delivered%0A%20%20%20%20%20*%20asynchronously%20at%20the%20next%20microtask%20checkpoint.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20any%20pending%20changes%20caused%20the%20observer%0A%20%20%20%20%20*%20callback%20to%20run.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flush'%2Cvalue%3Afunction%20flush()%7Bif(!this._connected)%7Breturn%20false%3B%7Dif(window.ShadyDOM)%7BShadyDOM.flush()%3B%7Dif(this._nativeChildrenObserver)%7Bthis._processSlotMutations(this._nativeChildrenObserver.takeRecords())%3B%7Delse%20if(this._shadyChildrenObserver)%7Bthis._processSlotMutations(this._shadyChildrenObserver.takeRecords())%3B%7Dthis._scheduled%3Dfalse%3Bvar%20info%3D%7Btarget%3Athis._target%2CaddedNodes%3A%5B%5D%2CremovedNodes%3A%5B%5D%7D%3Bvar%20newNodes%3Dthis.constructor.getFlattenedNodes(this._target)%3Bvar%20splices%3DPolymer.ArraySplice.calculateSplices(newNodes%2Cthis._effectiveNodes)%3B%2F%2F%20process%20removals%0Afor(var%20i%3D0%2Cs%3Bi%3Csplices.length%26%26(s%3Dsplices%5Bi%5D)%3Bi%2B%2B)%7Bfor(var%20j%3D0%2Cn%3Bj%3Cs.removed.length%26%26(n%3Ds.removed%5Bj%5D)%3Bj%2B%2B)%7Binfo.removedNodes.push(n)%3B%7D%7D%2F%2F%20process%20adds%0Afor(var%20_i%3D0%2C_s%3B_i%3Csplices.length%26%26(_s%3Dsplices%5B_i%5D)%3B_i%2B%2B)%7Bfor(var%20_j%3D_s.index%3B_j%3C_s.index%2B_s.addedCount%3B_j%2B%2B)%7Binfo.addedNodes.push(newNodes%5B_j%5D)%3B%7D%7D%2F%2F%20update%20cache%0Athis._effectiveNodes%3DnewNodes%3Bvar%20didFlush%3Dfalse%3Bif(info.addedNodes.length%7C%7Cinfo.removedNodes.length)%7BdidFlush%3Dtrue%3Bthis.callback.call(this._target%2Cinfo)%3B%7Dreturn%20didFlush%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Array%3CElement%7CNode%3E%7C!NodeList%3CNode%3E%7D%20nodeList%20Nodes%20that%20could%20change%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_listenSlots'%2Cvalue%3Afunction%20_listenSlots(nodeList)%7Bfor(var%20i%3D0%3Bi%3CnodeList.length%3Bi%2B%2B)%7Bvar%20n%3DnodeList%5Bi%5D%3Bif(isSlot(n))%7Bn.addEventListener('slotchange'%2Cthis._boundSchedule)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Array%3CElement%7CNode%3E%7C!NodeList%3CNode%3E%7D%20nodeList%20Nodes%20that%20could%20change%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_unlistenSlots'%2Cvalue%3Afunction%20_unlistenSlots(nodeList)%7Bfor(var%20i%3D0%3Bi%3CnodeList.length%3Bi%2B%2B)%7Bvar%20n%3DnodeList%5Bi%5D%3Bif(isSlot(n))%7Bn.removeEventListener('slotchange'%2Cthis._boundSchedule)%3B%7D%7D%7D%7D%5D)%3Breturn%20FlattenedNodesObserver%3B%7D()%3BPolymer.FlattenedNodesObserver%3DFlattenedNodesObserver%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fflattened-nodes-observer.html.js%0A",
            "resourceBytes": 9727,
            "encodedBytes": 0,
            "unusedBytes": 4068
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20debouncerQueue%3D%5B%5D%3B%2F**%0A%20%20%20*%20Adds%20a%20%60Polymer.Debouncer%60%20to%20a%20list%20of%20globally%20flushable%20tasks.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B!Polymer.Debouncer%7D%20debouncer%20Debouncer%20to%20enqueue%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.enqueueDebouncer%3Dfunction(debouncer)%7BdebouncerQueue.push(debouncer)%3B%7D%3Bfunction%20flushDebouncers()%7Bvar%20didFlush%3DBoolean(debouncerQueue.length)%3Bwhile(debouncerQueue.length)%7Btry%7BdebouncerQueue.shift().flush()%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7Dreturn%20didFlush%3B%7D%2F**%0A%20%20%20*%20Forces%20several%20classes%20of%20asynchronously%20queued%20tasks%20to%20flush%3A%0A%20%20%20*%20-%20Debouncers%20added%20via%20%60enqueueDebouncer%60%0A%20%20%20*%20-%20ShadyDOM%20distribution%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.flush%3Dfunction()%7Bvar%20shadyDOM%3Dvoid%200%2Cdebouncers%3Dvoid%200%3Bdo%7BshadyDOM%3Dwindow.ShadyDOM%26%26ShadyDOM.flush()%3Bif(window.ShadyCSS%26%26window.ShadyCSS.ScopingShim)%7Bwindow.ShadyCSS.ScopingShim.flush()%3B%7Ddebouncers%3DflushDebouncers()%3B%7Dwhile(shadyDOM%7C%7Cdebouncers)%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fflush.html.js%0A",
            "resourceBytes": 1114,
            "encodedBytes": 0,
            "unusedBytes": 489
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3Bvar%20p%3DElement.prototype%3B%2F**%0A%20%20%20*%20%40const%20%7Bfunction(this%3ANode%2C%20string)%3A%20boolean%7D%0A%20%20%20*%2Fvar%20normalizedMatchesSelector%3Dp.matches%7C%7Cp.matchesSelector%7C%7Cp.mozMatchesSelector%7C%7Cp.msMatchesSelector%7C%7Cp.oMatchesSelector%7C%7Cp.webkitMatchesSelector%3B%2F**%0A%20%20%20*%20Cross-platform%20%60element.matches%60%20shim.%0A%20%20%20*%0A%20%20%20*%20%40function%20matchesSelector%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20check%20selector%20against%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20match%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20node%20matched%20selector%0A%20%20%20*%2Fvar%20matchesSelector%3Dfunction%20matchesSelector(node%2Cselector)%7Breturn%20normalizedMatchesSelector.call(node%2Cselector)%3B%7D%3B%2F**%0A%20%20%20*%20Node%20API%20wrapper%20class%20returned%20from%20%60Polymer.dom.(target)%60%20when%0A%20%20%20*%20%60target%60%20is%20a%20%60Node%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2Fvar%20DomApi%3Dfunction()%7B%2F**%0A%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20for%20which%20to%20create%20a%20Polymer.dom%20helper%20object.%0A%20%20%20%20%20*%2Ffunction%20DomApi(node)%7B_classCallCheck(this%2CDomApi)%3Bthis.node%3Dnode%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20an%20instance%20of%20%60Polymer.FlattenedNodesObserver%60%20that%0A%20%20%20%20%20*%20listens%20for%20node%20changes%20on%20this%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bfunction(!Element%2C%20%7B%20target%3A%20!Element%2C%20addedNodes%3A%20!Array%3C!Element%3E%2C%20removedNodes%3A%20!Array%3C!Element%3E%20%7D)%3Avoid%7D%20callback%20Called%20when%20direct%20or%20distributed%20children%0A%20%20%20%20%20*%20%20%20of%20this%20element%20changes%0A%20%20%20%20%20*%20%40return%20%7B!Polymer.FlattenedNodesObserver%7D%20Observer%20instance%0A%20%20%20%20%20*%2F_createClass(DomApi%2C%5B%7Bkey%3A'observeNodes'%2Cvalue%3Afunction%20observeNodes(callback)%7Breturn%20new%20Polymer.FlattenedNodesObserver(this.node%2Ccallback)%3B%7D%2F**%0A%20%20%20%20%20*%20Disconnects%20an%20observer%20previously%20created%20via%20%60observeNodes%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!Polymer.FlattenedNodesObserver%7D%20observerHandle%20Observer%20instance%0A%20%20%20%20%20*%20%20%20to%20disconnect.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unobserveNodes'%2Cvalue%3Afunction%20unobserveNodes(observerHandle)%7BobserverHandle.disconnect()%3B%7D%2F**%0A%20%20%20%20%20*%20Provided%20as%20a%20backwards-compatible%20API%20only.%20%20This%20method%20does%20nothing.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyObserver'%2Cvalue%3Afunction%20notifyObserver()%7B%7D%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20provided%20node%20is%20contained%20with%20this%20element's%0A%20%20%20%20%20*%20light-DOM%20children%20or%20shadow%20root%2C%20including%20any%20nested%20shadow%20roots%0A%20%20%20%20%20*%20of%20children%20therein.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20test%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20given%20%60node%60%20is%20contained%20within%0A%20%20%20%20%20*%20%20%20this%20element's%20light%20or%20shadow%20DOM.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deepContains'%2Cvalue%3Afunction%20deepContains(node)%7Bif(this.node.contains(node))%7Breturn%20true%3B%7Dvar%20n%3Dnode%3Bvar%20doc%3Dnode.ownerDocument%3B%2F%2F%20walk%20from%20node%20to%20%60this%60%20or%20%60document%60%0Awhile(n%26%26n!%3D%3Ddoc%26%26n!%3D%3Dthis.node)%7B%2F%2F%20use%20logical%20parentnode%2C%20or%20native%20ShadowRoot%20host%0An%3Dn.parentNode%7C%7Cn.host%3B%7Dreturn%20n%3D%3D%3Dthis.node%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20root%20node%20of%20this%20node.%20%20Equivalent%20to%20%60getRoodNode()%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BNode%7D%20Top%20most%20element%20in%20the%20dom%20tree%20in%20which%20the%20node%0A%20%20%20%20%20*%20exists.%20If%20the%20node%20is%20connected%20to%20a%20document%20this%20is%20either%20a%0A%20%20%20%20%20*%20shadowRoot%20or%20the%20document%3B%20otherwise%2C%20it%20may%20be%20the%20node%0A%20%20%20%20%20*%20itself%20or%20a%20node%20or%20document%20fragment%20containing%20it.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getOwnerRoot'%2Cvalue%3Afunction%20getOwnerRoot()%7Breturn%20this.node.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20*%20For%20slot%20elements%2C%20returns%20the%20nodes%20assigned%20to%20the%20slot%3B%20otherwise%0A%20%20%20%20%20*%20an%20empty%20array.%20It%20is%20equivalent%20to%20%60%3Cslot%3E.addignedNodes(%7Bflatten%3Atrue%7D)%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20Array%20of%20assigned%20nodes%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getDistributedNodes'%2Cvalue%3Afunction%20getDistributedNodes()%7Breturn%20this.node.localName%3D%3D%3D'slot'%3Fthis.node.assignedNodes(%7Bflatten%3Atrue%7D)%3A%5B%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20an%20array%20of%20all%20slots%20this%20element%20was%20distributed%20to.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLSlotElement%3E%7D%20Description%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getDestinationInsertionPoints'%2Cvalue%3Afunction%20getDestinationInsertionPoints()%7Bvar%20ip%24%3D%5B%5D%3Bvar%20n%3Dthis.node.assignedSlot%3Bwhile(n)%7Bip%24.push(n)%3Bn%3Dn.assignedSlot%3B%7Dreturn%20ip%24%3B%7D%2F**%0A%20%20%20%20%20*%20Calls%20%60importNode%60%20on%20the%20%60ownerDocument%60%20for%20this%20node.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20import%0A%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20deep%20True%20if%20the%20node%20should%20be%20cloned%20deeply%20during%0A%20%20%20%20%20*%20%20%20import%0A%20%20%20%20%20*%20%40return%20%7BNode%7D%20Clone%20of%20given%20node%20imported%20to%20this%20owner%20document%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importNode'%2Cvalue%3Afunction%20importNode(node%2Cdeep)%7Bvar%20doc%3Dthis.node%20instanceof%20Document%3Fthis.node%3Athis.node.ownerDocument%3Breturn%20doc.importNode(node%2Cdeep)%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20Returns%20a%20flattened%20list%20of%20all%20child%20nodes%20and%0A%20%20%20%20%20*%20nodes%20assigned%20to%20child%20slots.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildNodes'%2Cvalue%3Afunction%20getEffectiveChildNodes()%7Breturn%20Polymer.FlattenedNodesObserver.getFlattenedNodes(this.node)%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20filtered%20list%20of%20flattened%20child%20elements%20for%20this%20element%20based%0A%20%20%20%20%20*%20on%20the%20given%20selector.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20filter%20nodes%20against%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLElement%3E%7D%20List%20of%20flattened%20child%20elements%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryDistributedElements'%2Cvalue%3Afunction%20queryDistributedElements(selector)%7Bvar%20c%24%3Dthis.getEffectiveChildNodes()%3Bvar%20list%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dc%24.length%2Cc%3Bi%3Cl%26%26(c%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7Bif(c.nodeType%3D%3D%3DNode.ELEMENT_NODE%26%26matchesSelector(c%2Cselector))%7Blist.push(c)%3B%7D%7Dreturn%20list%3B%7D%2F**%0A%20%20%20%20%20*%20For%20shadow%20roots%2C%20returns%20the%20currently%20focused%20element%20within%20this%0A%20%20%20%20%20*%20shadow%20root.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BNode%7Cundefined%7D%20Currently%20focused%20element%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'activeElement'%2Cget%3Afunction%20get()%7Bvar%20node%3Dthis.node%3Breturn%20node._activeElement!%3D%3Dundefined%3Fnode._activeElement%3Anode.activeElement%3B%7D%7D%5D)%3Breturn%20DomApi%3B%7D()%3Bfunction%20forwardMethods(proto%2Cmethods)%7Bvar%20_loop%3Dfunction%20_loop(i)%7Bvar%20method%3Dmethods%5Bi%5D%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2Fproto%5Bmethod%5D%3D%2F**%20%40this%20%7BDomApi%7D%20*%2Ffunction()%7Breturn%20this.node%5Bmethod%5D.apply(this.node%2Carguments)%3B%7D%3B%2F*%20eslint-enable%20*%2F%7D%3Bfor(var%20i%3D0%3Bi%3Cmethods.length%3Bi%2B%2B)%7B_loop(i)%3B%7D%7Dfunction%20forwardReadOnlyProperties(proto%2Cproperties)%7Bvar%20_loop2%3Dfunction%20_loop2(i)%7Bvar%20name%3Dproperties%5Bi%5D%3BObject.defineProperty(proto%2Cname%2C%7Bget%3Afunction%20get()%7Bvar%20domApi%3D%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis%3Breturn%20domApi.node%5Bname%5D%3B%7D%2Cconfigurable%3Atrue%7D)%3B%7D%3Bfor(var%20i%3D0%3Bi%3Cproperties.length%3Bi%2B%2B)%7B_loop2(i)%3B%7D%7Dfunction%20forwardProperties(proto%2Cproperties)%7Bvar%20_loop3%3Dfunction%20_loop3(i)%7Bvar%20name%3Dproperties%5Bi%5D%3BObject.defineProperty(proto%2Cname%2C%7Bget%3Afunction%20get()%7Bvar%20domApi%3D%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis%3Breturn%20domApi.node%5Bname%5D%3B%7D%2Cset%3Afunction%20set(value)%7B%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis.node%5Bname%5D%3Dvalue%3B%7D%2Cconfigurable%3Atrue%7D)%3B%7D%3Bfor(var%20i%3D0%3Bi%3Cproperties.length%3Bi%2B%2B)%7B_loop3(i)%3B%7D%7DforwardMethods(DomApi.prototype%2C%5B'cloneNode'%2C'appendChild'%2C'insertBefore'%2C'removeChild'%2C'replaceChild'%2C'setAttribute'%2C'removeAttribute'%2C'querySelector'%2C'querySelectorAll'%5D)%3BforwardReadOnlyProperties(DomApi.prototype%2C%5B'parentNode'%2C'firstChild'%2C'lastChild'%2C'nextSibling'%2C'previousSibling'%2C'firstElementChild'%2C'lastElementChild'%2C'nextElementSibling'%2C'previousElementSibling'%2C'childNodes'%2C'children'%2C'classList'%5D)%3BforwardProperties(DomApi.prototype%2C%5B'textContent'%2C'innerHTML'%5D)%3B%2F**%0A%20%20%20*%20Event%20API%20wrapper%20class%20returned%20from%20%60Polymer.dom.(target)%60%20when%0A%20%20%20*%20%60target%60%20is%20an%20%60Event%60.%0A%20%20%20*%2Fvar%20EventApi%3Dfunction()%7Bfunction%20EventApi(event)%7B_classCallCheck(this%2CEventApi)%3Bthis.event%3Devent%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20first%20node%20on%20the%20%60composedPath%60%20of%20this%20event.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!EventTarget%7D%20The%20node%20this%20event%20was%20dispatched%20to%0A%20%20%20%20%20*%2F_createClass(EventApi%2C%5B%7Bkey%3A'rootTarget'%2Cget%3Afunction%20get()%7Breturn%20this.event.composedPath()%5B0%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20local%20(re-targeted)%20target%20for%20this%20event.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!EventTarget%7D%20The%20local%20(re-targeted)%20target%20for%20this%20event.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'localTarget'%2Cget%3Afunction%20get()%7Breturn%20this.event.target%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20%60composedPath%60%20for%20this%20event.%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!EventTarget%3E%7D%20The%20nodes%20this%20event%20propagated%20through%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'path'%2Cget%3Afunction%20get()%7Breturn%20this.event.composedPath()%3B%7D%7D%5D)%3Breturn%20EventApi%3B%7D()%3BPolymer.DomApi%3DDomApi%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20deep%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.cloneNode%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.appendChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20newChild%0A%20%20%20*%20%40param%20%7BNode%7D%20refChild%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.insertBefore%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.removeChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20oldChild%0A%20%20%20*%20%40param%20%7B!Node%7D%20newChild%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.replaceChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%0A%20%20%20*%20%40param%20%7Bstring%7D%20value%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.setAttribute%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.removeAttribute%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%0A%20%20%20*%20%40return%20%7B%3FElement%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.querySelector%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%0A%20%20%20*%20%40return%20%7B!NodeList%3C!Element%3E%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.querySelectorAll%3B%2F**%0A%20%20%20*%20Legacy%20DOM%20and%20Event%20manipulation%20API%20wrapper%20factory%20used%20to%20abstract%0A%20%20%20*%20differences%20between%20native%20Shadow%20DOM%20and%20%22Shady%20DOM%22%20when%20polyfilling%20on%0A%20%20%20*%20older%20browsers.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20in%20Polymer%202.x%20use%20of%20%60Polymer.dom%60%20is%20no%20longer%20required%20and%0A%20%20%20*%20in%20the%20majority%20of%20cases%20simply%20facades%20directly%20to%20the%20standard%20native%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40summary%20Legacy%20DOM%20and%20Event%20manipulation%20API%20wrapper%20factory%20used%20to%0A%20%20%20*%20abstract%20differences%20between%20native%20Shadow%20DOM%20and%20%22Shady%20DOM.%22%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B(Node%7CEvent)%3D%7D%20obj%20Node%20or%20event%20to%20operate%20on%0A%20%20%20*%20%40return%20%7B!DomApi%7C!EventApi%7D%20Wrapper%20providing%20either%20node%20API%20or%20event%20API%0A%20%20%20*%2FPolymer.dom%3Dfunction(obj)%7Bobj%3Dobj%7C%7Cdocument%3Bif(!obj.__domApi)%7Bvar%20helper%3Dvoid%200%3Bif(obj%20instanceof%20Event)%7Bhelper%3Dnew%20EventApi(obj)%3B%7Delse%7Bhelper%3Dnew%20DomApi(obj)%3B%7Dobj.__domApi%3Dhelper%3B%7Dreturn%20obj.__domApi%3B%7D%3BPolymer.dom.matchesSelector%3DmatchesSelector%3B%2F**%0A%20%20%20*%20Forces%20several%20classes%20of%20asynchronously%20queued%20tasks%20to%20flush%3A%0A%20%20%20*%20-%20Debouncers%20added%20via%20%60Polymer.enqueueDebouncer%60%0A%20%20%20*%20-%20ShadyDOM%20distribution%0A%20%20%20*%0A%20%20%20*%20This%20method%20facades%20to%20%60Polymer.flush%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%2FPolymer.dom.flush%3DPolymer.flush%3B%2F**%0A%20%20%20*%20Adds%20a%20%60Polymer.Debouncer%60%20to%20a%20list%20of%20globally%20flushable%20tasks.%0A%20%20%20*%0A%20%20%20*%20This%20method%20facades%20to%20%60Polymer.enqueueDebouncer%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%20%40param%20%7B!Polymer.Debouncer%7D%20debouncer%20Debouncer%20to%20enqueue%0A%20%20%20*%2FPolymer.dom.addDebouncer%3DPolymer.enqueueDebouncer%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fpolymer.dom.html.js%0A",
            "resourceBytes": 11133,
            "encodedBytes": 0,
            "unusedBytes": 2351
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfor(var%20i%3D0%2Carr2%3DArray(arr.length)%3Bi%3Carr.length%3Bi%2B%2B)%7Barr2%5Bi%5D%3Darr%5Bi%5D%3B%7Dreturn%20arr2%3B%7Delse%7Breturn%20Array.from(arr)%3B%7D%7Dfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20styleInterface%3Dwindow.ShadyCSS%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20Polymer's%20%22legacy%22%20API%20intended%20to%20be%0A%20%20%20*%20backward-compatible%20to%20the%20greatest%20extent%20possible%20with%20the%20API%0A%20%20%20*%20found%20on%20the%20Polymer%201.x%20%60Polymer.Base%60%20prototype%20applied%20to%20all%20elements%0A%20%20%20*%20defined%20using%20the%20%60Polymer(%7B...%7D)%60%20function.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40appliesMixin%20Polymer.GestureEventListeners%0A%20%20%20*%20%40property%20isAttached%20%7Bboolean%7D%20Set%20to%20%60true%60%20in%20this%20element's%0A%20%20%20*%20%20%20%60connectedCallback%60%20and%20%60false%60%20in%20%60disconnectedCallback%60%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20Polymer's%20%22legacy%22%20API%0A%20%20%20*%2FPolymer.LegacyElementMixin%3DPolymer.dedupingMixin(function(base)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_GestureEventListeners%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_DirMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20legacyElementBase%3DPolymer.DirMixin(Polymer.GestureEventListeners(Polymer.ElementMixin(base)))%3B%2F**%0A%20%20%20%20%20*%20Map%20of%20simple%20names%20to%20touch%20action%20names%0A%20%20%20%20%20*%20%40dict%0A%20%20%20%20%20*%2Fvar%20DIRECTION_MAP%3D%7B'x'%3A'pan-x'%2C'y'%3A'pan-y'%2C'none'%3A'none'%2C'all'%3A'auto'%7D%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40extends%20%7BlegacyElementBase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_LegacyElementMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20LegacyElement%3Dfunction(_legacyElementBase)%7B_inherits(LegacyElement%2C_legacyElementBase)%3Bfunction%20LegacyElement()%7B_classCallCheck(this%2CLegacyElement)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(LegacyElement.__proto__%7C%7CObject.getPrototypeOf(LegacyElement)).call(this))%3B_this.isAttached%3B%2F**%20%40type%20%7BWeakMap%3C!Element%2C%20!Object%3Cstring%2C%20!Function%3E%3E%7D%20*%2F_this.__boundListeners%3B%2F**%20%40type%20%7BObject%3Cstring%2C%20Function%3E%7D%20*%2F_this._debouncers%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Forwards%20%60importMeta%60%20from%20the%20prototype%20(i.e.%20from%20the%20info%20object%0A%20%20%20%20%20%20%20*%20passed%20to%20%60Polymer(%7B...%7D)%60)%20to%20the%20static%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20The%20%60import.meta%60%20object%20set%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20%60this%60%20is%20always%20in%20the%20instance%20in%0A%20%20%20%20%20%20%20*%20%20closure%20for%20some%20reason%20even%20in%20a%20static%20method%2C%20rather%20than%20the%20class%0A%20%20%20%20%20%20%20*%2F_createClass(LegacyElement%2C%5B%7Bkey%3A'created'%2C%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20the%20%60constructor%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20created()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20implementation%20of%20%60connectedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20Polymer%20legacy%20API's%20%60attached%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.isAttached%3Dtrue%3Bthis.attached()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60connectedCallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attached'%2Cvalue%3Afunction%20attached()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20implementation%20of%20%60disconnectedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20Polymer%20legacy%20API's%20%60detached%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bthis.isAttached%3Dfalse%3Bthis.detached()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60disconnectedCallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'detached'%2Cvalue%3Afunction%20detached()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20override%20implementation%20of%20%60attributeChangedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20the%20Polymer%20legacy%20API's%20%60attributeChanged%60%20method.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'attributeChangedCallback'%2Cthis).call(this%2Cname%2Cold%2Cvalue%2Cnamespace)%3Bthis.attributeChanged(name%2Cold%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60attributeChangedChallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChanged'%2Cvalue%3Afunction%20attributeChanged(name%2Cold%2Cvalue)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyEffects%60%20implementation%20to%0A%20%20%20%20%20%20%20*%20add%20support%20for%20class%20initialization%20via%20the%20%60_registered%60%20callback.%0A%20%20%20%20%20%20%20*%20This%20is%20called%20only%20when%20the%20first%20instance%20of%20the%20element%20is%20created.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7Bvar%20proto%3DObject.getPrototypeOf(this)%3Bif(!proto.hasOwnProperty('__hasRegisterFinished'))%7Bthis._registered()%3B%2F%2F%20backstop%20in%20case%20the%20%60_registered%60%20implementation%20does%20not%20set%20this%0Aproto.__hasRegisterFinished%3Dtrue%3B%7D_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3Bthis.root%3D%2F**%20%40type%20%7BHTMLElement%7D%20*%2Fthis%3Bthis.created()%3B%2F%2F%20Ensure%20listeners%20are%20applied%20immediately%20so%20that%20they%20are%0A%2F%2F%20added%20before%20declarative%20event%20listeners.%20This%20allows%20an%20element%20to%0A%2F%2F%20decorate%20itself%20via%20an%20event%20prior%20to%20any%20declarative%20listeners%0A%2F%2F%20seeing%20the%20event.%20Note%2C%20this%20ensures%20compatibility%20with%201.x%20ordering.%0Athis._applyListeners()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20automatically%20when%20an%20element%20is%20initializing.%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20perform%20class%20registration%20time%0A%20%20%20%20%20%20%20*%20work.%20The%20implementation%20should%20ensure%20the%20work%20is%20performed%0A%20%20%20%20%20%20%20*%20only%20once%20for%20the%20class.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_registered'%2Cvalue%3Afunction%20_registered()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyEffects%60%20implementation%20to%0A%20%20%20%20%20%20%20*%20add%20support%20for%20installing%20%60hostAttributes%60%20and%20%60listeners%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bthis._ensureAttributes()%3B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'ready'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20element%20has%20required%20attributes.%20Called%20when%20the%20element%0A%20%20%20%20%20%20%20*%20is%20being%20readied%20via%20%60ready%60.%20Users%20should%20override%20to%20set%20the%0A%20%20%20%20%20%20%20*%20element's%20required%20attributes.%20The%20implementation%20should%20be%20sure%0A%20%20%20%20%20%20%20*%20to%20check%20and%20not%20override%20existing%20attributes%20added%20by%0A%20%20%20%20%20%20%20*%20the%20user%20of%20the%20element.%20Typically%2C%20setting%20attributes%20should%20be%20left%0A%20%20%20%20%20%20%20*%20to%20the%20element%20user%20and%20not%20done%20here%3B%20reasonable%20exceptions%20include%0A%20%20%20%20%20%20%20*%20setting%20aria%20roles%20and%20focusability.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttributes'%2Cvalue%3Afunction%20_ensureAttributes()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20element%20event%20listeners.%20Called%20when%20the%20element%0A%20%20%20%20%20%20%20*%20is%20being%20readied%20via%20%60ready%60.%20Users%20should%20override%20to%0A%20%20%20%20%20%20%20*%20add%20any%20required%20element%20event%20listeners.%0A%20%20%20%20%20%20%20*%20In%20performance%20critical%20elements%2C%20the%20work%20done%20here%20should%20be%20kept%0A%20%20%20%20%20%20%20*%20to%20a%20minimum%20since%20it%20is%20done%20before%20the%20element%20is%20rendered.%20In%0A%20%20%20%20%20%20%20*%20these%20elements%2C%20consider%20adding%20listeners%20asynchronously%20so%20as%20not%20to%0A%20%20%20%20%20%20%20*%20block%20render.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_applyListeners'%2Cvalue%3Afunction%20_applyListeners()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20typed%20JavaScript%20value%20to%20a%20string.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%20To%20customize%0A%20%20%20%20%20%20%20*%20how%20properties%20are%20serialized%20to%20attributes%20for%20attribute%20bindings%20and%0A%20%20%20%20%20%20%20*%20%60reflectToAttribute%3A%20true%60%20properties%20as%20well%20as%20this%20method%2C%20override%0A%20%20%20%20%20%20%20*%20the%20%60_serializeValue%60%20method%20provided%20by%20%60Polymer.PropertyAccessors%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20deserialize%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20Serialized%20value%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'serialize'%2Cvalue%3Afunction%20serialize(value)%7Breturn%20this._serializeValue(value)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%20%20To%20customize%0A%20%20%20%20%20%20%20*%20how%20attributes%20are%20deserialized%20to%20properties%20for%20in%0A%20%20%20%20%20%20%20*%20%60attributeChangedCallback%60%2C%20override%20%60_deserializeValue%60%20method%0A%20%20%20%20%20%20%20*%20provided%20by%20%60Polymer.PropertyAccessors%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20String%20to%20deserialize%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20type%20Type%20to%20deserialize%20the%20string%20to%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20deserialized%20value%20in%20the%20%60type%60%20given.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deserialize'%2Cvalue%3Afunction%20deserialize(value%2Ctype)%7Breturn%20this._deserializeValue(value%2Ctype)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Serializes%20a%20property%20to%20its%20associated%20attribute.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20attribute%20Attribute%20name%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Property%20value%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'reflectPropertyToAttribute'%2Cvalue%3Afunction%20reflectPropertyToAttribute(property%2Cattribute%2Cvalue)%7Bthis._propertyToAttribute(property%2Cattribute%2Cvalue)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20typed%20value%20to%20an%20HTML%20attribute%20on%20a%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20serialize.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Attribute%20name%20to%20serialize%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20set%20attribute%20to.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'serializeValueToAttribute'%2Cvalue%3Afunction%20serializeValueToAttribute(value%2Cattribute%2Cnode)%7Bthis._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%2Cvalue%2Cattribute)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Copies%20own%20properties%20(including%20accessor%20descriptors)%20from%20a%20source%0A%20%20%20%20%20%20%20*%20object%20to%20a%20target%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20prototype%20Target%20object%20to%20copy%20properties%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20api%20Source%20object%20to%20copy%20properties%20from.%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20prototype%20object%20that%20was%20passed%20as%20first%20argument.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'extend'%2Cvalue%3Afunction%20extend(prototype%2Capi)%7Bif(!(prototype%26%26api))%7Breturn%20prototype%7C%7Capi%3B%7Dvar%20n%24%3DObject.getOwnPropertyNames(api)%3Bfor(var%20i%3D0%2Cn%3Bi%3Cn%24.length%26%26(n%3Dn%24%5Bi%5D)%3Bi%2B%2B)%7Bvar%20pd%3DObject.getOwnPropertyDescriptor(api%2Cn)%3Bif(pd)%7BObject.defineProperty(prototype%2Cn%2Cpd)%3B%7D%7Dreturn%20prototype%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Copies%20props%20from%20a%20source%20object%20to%20a%20target%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20this%20method%20uses%20a%20simple%20%60for...in%60%20strategy%20for%20enumerating%0A%20%20%20%20%20%20%20*%20properties.%20%20To%20ensure%20only%20%60ownProperties%60%20are%20copied%20from%20source%0A%20%20%20%20%20%20%20*%20to%20target%20and%20that%20accessor%20implementations%20are%20copied%2C%20use%20%60extend%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20target%20Target%20object%20to%20copy%20properties%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20source%20Source%20object%20to%20copy%20properties%20from.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20Target%20object%20that%20was%20passed%20as%20first%20argument.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'mixin'%2Cvalue%3Afunction%20mixin(target%2Csource)%7Bfor(var%20i%20in%20source)%7Btarget%5Bi%5D%3Dsource%5Bi%5D%3B%7Dreturn%20target%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20the%20prototype%20of%20an%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20object%20The%20object%20on%20which%20to%20set%20the%20prototype.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20prototype%20The%20prototype%20that%20will%20be%20set%20on%20the%20given%0A%20%20%20%20%20%20%20*%20%60object%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20Returns%20the%20given%20%60object%60%20with%20its%20prototype%20set%0A%20%20%20%20%20%20%20*%20to%20the%20given%20%60prototype%60%20object.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'chainObject'%2Cvalue%3Afunction%20chainObject(object%2Cprototype)%7Bif(object%26%26prototype%26%26object!%3D%3Dprototype)%7Bobject.__proto__%3Dprototype%3B%7Dreturn%20object%3B%7D%2F*%20****%20Begin%20Template%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Calls%20%60importNode%60%20on%20the%20%60content%60%20of%20the%20%60template%60%20specified%20and%0A%20%20%20%20%20%20%20*%20returns%20a%20document%20fragment%20containing%20the%20imported%20content.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20HTML%20template%20element%20to%20instance.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!DocumentFragment%7D%20Document%20fragment%20containing%20the%20imported%0A%20%20%20%20%20%20%20*%20%20%20template%20content.%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'instanceTemplate'%2Cvalue%3Afunction%20instanceTemplate(template)%7Bvar%20content%3Dthis.constructor._contentForTemplate(template)%3Bvar%20dom%3D%2F**%20%40type%20%7B!DocumentFragment%7D%20*%2Fdocument.importNode(content%2Ctrue)%3Breturn%20dom%3B%7D%2F*%20****%20Begin%20Events%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Dispatches%20a%20custom%20event%20with%20an%20optional%20detail%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Name%20of%20event%20type.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20detail%20Detail%20value%20containing%20event-specific%0A%20%20%20%20%20%20%20*%20%20%20payload.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%7B%20bubbles%3A%20(boolean%7Cundefined)%2C%20cancelable%3A%20(boolean%7Cundefined)%2C%20composed%3A%20(boolean%7Cundefined)%20%7D%3D%7D%0A%20%20%20%20%20%20%20*%20%20options%20Object%20specifying%20options.%20%20These%20may%20include%3A%0A%20%20%20%20%20%20%20*%20%20%60bubbles%60%20(boolean%2C%20defaults%20to%20%60true%60)%2C%0A%20%20%20%20%20%20%20*%20%20%60cancelable%60%20(boolean%2C%20defaults%20to%20false)%2C%20and%0A%20%20%20%20%20%20%20*%20%20%60node%60%20on%20which%20to%20fire%20the%20event%20(HTMLElement%2C%20defaults%20to%20%60this%60).%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Event%7D%20The%20new%20event%20that%20was%20fired.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'fire'%2Cvalue%3Afunction%20fire(type%2Cdetail%2Coptions)%7Boptions%3Doptions%7C%7C%7B%7D%3Bdetail%3Ddetail%3D%3D%3Dnull%7C%7Cdetail%3D%3D%3Dundefined%3F%7B%7D%3Adetail%3Bvar%20event%3Dnew%20Event(type%2C%7Bbubbles%3Aoptions.bubbles%3D%3D%3Dundefined%3Ftrue%3Aoptions.bubbles%2Ccancelable%3ABoolean(options.cancelable)%2Ccomposed%3Aoptions.composed%3D%3D%3Dundefined%3Ftrue%3Aoptions.composed%7D)%3Bevent.detail%3Ddetail%3Bvar%20node%3Doptions.node%7C%7Cthis%3Bnode.dispatchEvent(event)%3Breturn%20event%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20add%20an%20event%20listener%20on%20a%20given%20element%2C%0A%20%20%20%20%20%20%20*%20late%20bound%20to%20a%20named%20method%20on%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20add%20event%20listener%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%20to%20listen%20for.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20handler%20method%20on%20%60this%60%20to%20call.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'listen'%2Cvalue%3Afunction%20listen(node%2CeventName%2CmethodName)%7Bnode%3D%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%3Bvar%20hbl%3Dthis.__boundListeners%7C%7C(this.__boundListeners%3Dnew%20WeakMap())%3Bvar%20bl%3Dhbl.get(node)%3Bif(!bl)%7Bbl%3D%7B%7D%3Bhbl.set(node%2Cbl)%3B%7Dvar%20key%3DeventName%2BmethodName%3Bif(!bl%5Bkey%5D)%7Bbl%5Bkey%5D%3Dthis._addMethodEventListenerToNode(node%2CeventName%2CmethodName%2Cthis)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20remove%20an%20event%20listener%20from%20a%20given%20element%2C%0A%20%20%20%20%20%20%20*%20late%20bound%20to%20a%20named%20method%20on%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20remove%20event%20listener%20from.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%20to%20stop%20listening%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20handler%20method%20on%20%60this%60%20to%20not%20call%0A%20%20%20%20%20%20%20anymore.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlisten'%2Cvalue%3Afunction%20unlisten(node%2CeventName%2CmethodName)%7Bnode%3D%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%3Bvar%20bl%3Dthis.__boundListeners%26%26this.__boundListeners.get(node)%3Bvar%20key%3DeventName%2BmethodName%3Bvar%20handler%3Dbl%26%26bl%5Bkey%5D%3Bif(handler)%7Bthis._removeEventListenerFromNode(node%2CeventName%2Chandler)%3Bbl%5Bkey%5D%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20scrolling%20behavior%20to%20all%20direction%2C%20one%20direction%2C%20or%20none.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Valid%20scroll%20directions%3A%0A%20%20%20%20%20%20%20*%20%20%20-%20'all'%3A%20scroll%20in%20any%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'x'%3A%20scroll%20only%20in%20the%20'x'%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'y'%3A%20scroll%20only%20in%20the%20'y'%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'none'%3A%20disable%20scrolling%20for%20this%20node%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20direction%20Direction%20to%20allow%20scrolling%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60all%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20scroll%20direction%20setting.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setScrollDirection'%2Cvalue%3Afunction%20setScrollDirection(direction%2Cnode)%7BPolymer.Gestures.setTouchAction(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%2CDIRECTION_MAP%5Bdirection%5D%7C%7C'auto')%3B%7D%2F*%20****%20End%20Events%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20run%20%60querySelector%60%20on%20this%20local%20DOM%20scope.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20calls%20%60Polymer.dom(this.root).querySelector(slctr)%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20slctr%20Selector%20to%20run%20on%20this%20local%20DOM%20scope%0A%20%20%20%20%20%20%20*%20%40return%20%7BElement%7D%20Element%20found%20by%20the%20selector%2C%20or%20null%20if%20not%20found.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'%24%24'%2Cvalue%3Afunction%20%24%24(slctr)%7Breturn%20this.root.querySelector(slctr)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Return%20the%20element%20whose%20local%20dom%20within%20which%20this%20element%0A%20%20%20%20%20%20%20*%20is%20contained.%20This%20is%20a%20shorthand%20for%0A%20%20%20%20%20%20%20*%20%60this.getRootNode().host%60.%0A%20%20%20%20%20%20%20*%20%40this%20%7BElement%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'distributeContent'%2C%2F**%0A%20%20%20%20%20%20%20*%20Force%20this%20element%20to%20distribute%20its%20children%20to%20its%20local%20dom.%0A%20%20%20%20%20%20%20*%20This%20should%20not%20be%20necessary%20as%20of%20Polymer%202.0.2%20and%20is%20provided%20only%0A%20%20%20%20%20%20%20*%20for%20backwards%20compatibility.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20distributeContent()%7Bif(window.ShadyDOM%26%26this.shadowRoot)%7BShadyDOM.flush()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20that%20are%20the%20effective%20childNodes.%20The%20effective%0A%20%20%20%20%20%20%20*%20childNodes%20list%20is%20the%20same%20as%20the%20element's%20childNodes%20except%20that%0A%20%20%20%20%20%20%20*%20any%20%60%3Ccontent%3E%60%20elements%20are%20replaced%20with%20the%20list%20of%20nodes%20distributed%0A%20%20%20%20%20%20%20*%20to%20the%20%60%3Ccontent%3E%60%2C%20the%20result%20of%20its%20%60getDistributedNodes%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20child%20nodes.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildNodes'%2Cvalue%3Afunction%20getEffectiveChildNodes()%7Bvar%20thisEl%3D%2F**%20%40type%20%7BElement%7D%20*%2Fthis%3Bvar%20domApi%3D%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(thisEl)%3Breturn%20domApi.getEffectiveChildNodes()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20distributed%20within%20this%20element%20that%20match%0A%20%20%20%20%20%20%20*%20%60selector%60.%20These%20can%20be%20dom%20children%20or%20elements%20distributed%20to%0A%20%20%20%20%20%20%20*%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20distributed%20elements%20that%20match%20selector.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryDistributedElements'%2Cvalue%3Afunction%20queryDistributedElements(selector)%7Bvar%20thisEl%3D%2F**%20%40type%20%7BElement%7D%20*%2Fthis%3Bvar%20domApi%3D%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(thisEl)%3Breturn%20domApi.queryDistributedElements(selector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20elements%20that%20are%20the%20effective%20children.%20The%20effective%0A%20%20%20%20%20%20%20*%20children%20list%20is%20the%20same%20as%20the%20element's%20children%20except%20that%0A%20%20%20%20%20%20%20*%20any%20%60%3Ccontent%3E%60%20elements%20are%20replaced%20with%20the%20list%20of%20elements%0A%20%20%20%20%20%20%20*%20distributed%20to%20the%20%60%3Ccontent%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20children.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildren'%2Cvalue%3Afunction%20getEffectiveChildren()%7Bvar%20list%3Dthis.getEffectiveChildNodes()%3Breturn%20list.filter(function(%2F**%20%40type%20%7B!Node%7D%20*%2Fn)%7Breturn%20n.nodeType%3D%3D%3DNode.ELEMENT_NODE%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20string%20of%20text%20content%20that%20is%20the%20concatenation%20of%20the%0A%20%20%20%20%20%20%20*%20text%20content's%20of%20the%20element's%20effective%20childNodes%20(the%20elements%0A%20%20%20%20%20%20%20*%20returned%20by%20%3Ca%20href%3D%22%23getEffectiveChildNodes%3EgetEffectiveChildNodes%3C%2Fa%3E.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20List%20of%20effective%20children.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveTextContent'%2Cvalue%3Afunction%20getEffectiveTextContent()%7Bvar%20cn%3Dthis.getEffectiveChildNodes()%3Bvar%20tc%3D%5B%5D%3Bfor(var%20i%3D0%2Cc%3Bc%3Dcn%5Bi%5D%3Bi%2B%2B)%7Bif(c.nodeType!%3D%3DNode.COMMENT_NODE)%7Btc.push(c.textContent)%3B%7D%7Dreturn%20tc.join('')%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20first%20effective%20childNode%20within%20this%20element%20that%0A%20%20%20%20%20%20%20*%20match%20%60selector%60.%20These%20can%20be%20dom%20child%20nodes%20or%20elements%20distributed%0A%20%20%20%20%20%20%20*%20to%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7BNode%7D%20First%20effective%20child%20node%20that%20matches%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryEffectiveChildren'%2Cvalue%3Afunction%20queryEffectiveChildren(selector)%7Bvar%20e%24%3Dthis.queryDistributedElements(selector)%3Breturn%20e%24%26%26e%24%5B0%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20effective%20childNodes%20within%20this%20element%20that%0A%20%20%20%20%20%20%20*%20match%20%60selector%60.%20These%20can%20be%20dom%20child%20nodes%20or%20elements%20distributed%0A%20%20%20%20%20%20%20*%20to%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20child%20nodes%20that%20match%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryAllEffectiveChildren'%2Cvalue%3Afunction%20queryAllEffectiveChildren(selector)%7Breturn%20this.queryDistributedElements(selector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20distributed%20to%20this%20element's%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20this%20element%20contains%20more%20than%20one%20%60%3Cslot%3E%60%20in%20its%20local%20DOM%2C%0A%20%20%20%20%20%20%20*%20an%20optional%20selector%20may%20be%20passed%20to%20choose%20the%20desired%20content.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20slctr%20CSS%20selector%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20%20%20%60%3Cslot%3E%60.%20%20Defaults%20to%20%60content%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20distributed%20nodes%20for%20the%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getContentChildNodes'%2Cvalue%3Afunction%20getContentChildNodes(slctr)%7Bvar%20content%3Dthis.root.querySelector(slctr%7C%7C'slot')%3Breturn%20content%3F%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(content).getDistributedNodes()%3A%5B%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20element%20children%20distributed%20to%20this%20element's%0A%20%20%20%20%20%20%20*%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20this%20element%20contains%20more%20than%20one%20%60%3Cslot%3E%60%20in%20its%0A%20%20%20%20%20%20%20*%20local%20DOM%2C%20an%20optional%20selector%20may%20be%20passed%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20content.%20%20This%20method%20differs%20from%20%60getContentChildNodes%60%20in%20that%20only%0A%20%20%20%20%20%20%20*%20elements%20are%20returned.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20slctr%20CSS%20selector%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20%20%20%60%3Ccontent%3E%60.%20%20Defaults%20to%20%60content%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLElement%3E%7D%20List%20of%20distributed%20nodes%20for%20the%0A%20%20%20%20%20%20%20*%20%20%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getContentChildren'%2Cvalue%3Afunction%20getContentChildren(slctr)%7Bvar%20children%3D%2F**%20%40type%20%7B!Array%3C!HTMLElement%3E%7D%20*%2Fthis.getContentChildNodes(slctr).filter(function(n)%7Breturn%20n.nodeType%3D%3D%3DNode.ELEMENT_NODE%3B%7D)%3Breturn%20children%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Checks%20whether%20an%20element%20is%20in%20this%20element's%20light%20DOM%20tree.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3FNode%7D%20node%20The%20element%20to%20be%20checked.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20node%20is%20in%20this%20element's%20light%20DOM%20tree.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isLightDescendant'%2Cvalue%3Afunction%20isLightDescendant(node)%7Bvar%20thisNode%3D%2F**%20%40type%20%7BNode%7D%20*%2Fthis%3Breturn%20thisNode!%3D%3Dnode%26%26thisNode.contains(node)%26%26thisNode.getRootNode()%3D%3D%3Dnode.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Checks%20whether%20an%20element%20is%20in%20this%20element's%20local%20DOM%20tree.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Element%7D%20node%20The%20element%20to%20be%20checked.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20node%20is%20in%20this%20element's%20local%20DOM%20tree.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isLocalDescendant'%2Cvalue%3Afunction%20isLocalDescendant(node)%7Breturn%20this.root%3D%3D%3Dnode.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20No-op%20for%20backwards%20compatibility.%20This%20should%20now%20be%20handled%20by%0A%20%20%20%20%20%20%20*%20ShadyCss%20library.%0A%20%20%20%20%20%20%20*%20%40param%20%20%7B*%7D%20container%20Unused%0A%20%20%20%20%20%20%20*%20%40param%20%20%7B*%7D%20shouldObserve%20Unused%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'scopeSubtree'%2Cvalue%3Afunction%20scopeSubtree(container%2CshouldObserve)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20computed%20style%20value%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20The%20css%20property%20name.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Returns%20the%20computed%20css%20property%20value%20for%20the%20given%0A%20%20%20%20%20%20%20*%20%60property%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getComputedStyleValue'%2Cvalue%3Afunction%20getComputedStyleValue(property)%7Breturn%20styleInterface.getComputedStyleValue(%2F**%20%40type%20%7B!Element%7D%20*%2Fthis%2Cproperty)%3B%7D%2F%2F%20debounce%0A%2F**%0A%20%20%20%20%20%20%20*%20Call%20%60debounce%60%20to%20collapse%20multiple%20requests%20for%20a%20named%20task%20into%0A%20%20%20%20%20%20%20*%20one%20invocation%20which%20is%20made%20after%20the%20wait%20time%20has%20elapsed%20with%0A%20%20%20%20%20%20%20*%20no%20new%20request.%20%20If%20no%20wait%20time%20is%20given%2C%20the%20callback%20will%20be%20called%0A%20%20%20%20%20%20%20*%20at%20microtask%20timing%20(guaranteed%20before%20paint).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20debouncedClickAction(e)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%2F%2F%20will%20not%20call%20%60processClick%60%20more%20than%20once%20per%20100ms%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20this.debounce('click'%2C%20function()%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20this.processClick()%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%20100)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20String%20to%20identify%20the%20debounce%20job.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction()%3Avoid%7D%20callback%20Function%20that%20is%20called%20(with%20%60this%60%0A%20%20%20%20%20%20%20*%20%20%20context)%20when%20the%20wait%20time%20elapses.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20wait%20Optional%20wait%20time%20in%20milliseconds%20(ms)%20after%20the%0A%20%20%20%20%20%20%20*%20%20%20last%20signal%20that%20must%20elapse%20before%20invoking%20%60callback%60%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20Returns%20a%20debouncer%20object%20on%20which%20exists%20the%0A%20%20%20%20%20%20%20*%20following%20methods%3A%20%60isActive()%60%20returns%20true%20if%20the%20debouncer%20is%0A%20%20%20%20%20%20%20*%20active%3B%20%60cancel()%60%20cancels%20the%20debouncer%20if%20it%20is%20active%3B%0A%20%20%20%20%20%20%20*%20%60flush()%60%20immediately%20invokes%20the%20debounced%20callback%20if%20the%20debouncer%0A%20%20%20%20%20%20%20*%20is%20active.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'debounce'%2Cvalue%3Afunction%20debounce(jobName%2Ccallback%2Cwait)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Breturn%20this._debouncers%5BjobName%5D%3DPolymer.Debouncer.debounce(this._debouncers%5BjobName%5D%2Cwait%3E0%3FPolymer.Async.timeOut.after(wait)%3APolymer.Async.microTask%2Ccallback.bind(this))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20a%20named%20debouncer%20is%20active.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20debouncer%20is%20active%20(has%20not%20yet%20fired).%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isDebouncerActive'%2Cvalue%3Afunction%20isDebouncerActive(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Breturn!!(debouncer%26%26debouncer.isActive())%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Immediately%20calls%20the%20debouncer%20%60callback%60%20and%20inactivates%20it.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flushDebouncer'%2Cvalue%3Afunction%20flushDebouncer(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Bif(debouncer)%7Bdebouncer.flush()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20an%20active%20debouncer.%20%20The%20%60callback%60%20will%20not%20be%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancelDebouncer'%2Cvalue%3Afunction%20cancelDebouncer(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Bif(debouncer)%7Bdebouncer.cancel()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Runs%20a%20callback%20function%20asynchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20By%20default%20(if%20no%20waitTime%20is%20specified)%2C%20async%20callbacks%20are%20run%20at%0A%20%20%20%20%20%20%20*%20microtask%20timing%2C%20which%20will%20occur%20before%20paint.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%7D%20callback%20The%20callback%20function%20to%20run%2C%20bound%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20waitTime%20Time%20to%20wait%20before%20calling%20the%0A%20%20%20%20%20%20%20*%20%20%20%60callback%60.%20%20If%20unspecified%20or%200%2C%20the%20callback%20will%20be%20run%20at%20microtask%0A%20%20%20%20%20%20%20*%20%20%20timing%20(before%20paint).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20that%20may%20be%20used%20to%20cancel%20the%20async%20job.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'async'%2Cvalue%3Afunction%20async(callback%2CwaitTime)%7Breturn%20waitTime%3E0%3FPolymer.Async.timeOut.run(callback.bind(this)%2CwaitTime)%3A~Polymer.Async.microTask.run(callback.bind(this))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20an%20async%20operation%20started%20with%20%60async%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20original%20%60async%60%20call%20to%0A%20%20%20%20%20%20%20*%20%20%20cancel.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancelAsync'%2Cvalue%3Afunction%20cancelAsync(handle)%7Bhandle%3C0%3FPolymer.Async.microTask.cancel(~handle)%3APolymer.Async.timeOut.cancel(handle)%3B%7D%2F%2F%20other%0A%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20creating%20an%20element%20and%20configuring%20it.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20tag%20HTML%20element%20tag%20to%20create.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20props%20Object%20of%20properties%20to%20configure%20on%20the%0A%20%20%20%20%20%20%20*%20%20%20%20instance.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Element%7D%20Newly%20created%20and%20configured%20element.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'create'%2Cvalue%3Afunction%20create(tag%2Cprops)%7Bvar%20elt%3Ddocument.createElement(tag)%3Bif(props)%7Bif(elt.setProperties)%7Belt.setProperties(props)%3B%7Delse%7Bfor(var%20n%20in%20props)%7Belt%5Bn%5D%3Dprops%5Bn%5D%3B%7D%7D%7Dreturn%20elt%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20importing%20an%20HTML%20document%20imperatively.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20creates%20a%20new%20%60%3Clink%20rel%3D%22import%22%3E%60%20element%20with%0A%20%20%20%20%20%20%20*%20the%20provided%20URL%20and%20appends%20it%20to%20the%20document%20to%20start%20loading.%0A%20%20%20%20%20%20%20*%20In%20the%20%60onload%60%20callback%2C%20the%20%60import%60%20property%20of%20the%20%60link%60%0A%20%20%20%20%20%20%20*%20element%20will%20contain%20the%20imported%20document%20contents.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20href%20URL%20to%20document%20to%20load.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!Event)%3Avoid%3D%7D%20onload%20Callback%20to%20notify%20when%20an%20import%20successfully%0A%20%20%20%20%20%20%20*%20%20%20loaded.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!ErrorEvent)%3Avoid%3D%7D%20onerror%20Callback%20to%20notify%20when%20an%20import%0A%20%20%20%20%20%20%20*%20%20%20unsuccessfully%20loaded.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20optAsync%20True%20if%20the%20import%20should%20be%20loaded%20%60async%60.%0A%20%20%20%20%20%20%20*%20%20%20Defaults%20to%20%60false%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!HTMLLinkElement%7D%20The%20link%20element%20for%20the%20URL%20to%20be%20loaded.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importHref'%2Cvalue%3Afunction%20importHref(href%2Conload%2Conerror%2CoptAsync)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Avar%20loadFn%3Donload%3Fonload.bind(this)%3Anull%3Bvar%20errorFn%3Donerror%3Fonerror.bind(this)%3Anull%3Breturn%20Polymer.importHref(href%2CloadFn%2CerrorFn%2CoptAsync)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Polyfill%20for%20Element.prototype.matches%2C%20which%20is%20sometimes%20still%0A%20%20%20%20%20%20%20*%20prefixed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20test.%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Element%3D%7D%20node%20Element%20to%20test%20the%20selector%20against.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20element%20matches%20the%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'elementMatches'%2Cvalue%3Afunction%20elementMatches(selector%2Cnode)%7Breturn%20Polymer.dom.matchesSelector(%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%2Cselector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Toggles%20an%20HTML%20attribute%20on%20or%20off.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20HTML%20attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20bool%20Boolean%20to%20force%20the%20attribute%20on%20or%20off.%0A%20%20%20%20%20%20%20*%20%20%20%20When%20unspecified%2C%20the%20state%20of%20the%20attribute%20will%20be%20reversed.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Node%20to%20target.%20%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'toggleAttribute'%2Cvalue%3Afunction%20toggleAttribute(name%2Cbool%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bif(arguments.length%3D%3D1)%7Bbool%3D!node.hasAttribute(name)%3B%7Dif(bool)%7Bnode.setAttribute(name%2C'')%3B%7Delse%7Bnode.removeAttribute(name)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Toggles%20a%20CSS%20class%20on%20or%20off.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20CSS%20class%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20bool%20Boolean%20to%20force%20the%20class%20on%20or%20off.%0A%20%20%20%20%20%20%20*%20%20%20%20When%20unspecified%2C%20the%20state%20of%20the%20class%20will%20be%20reversed.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Node%20to%20target.%20%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'toggleClass'%2Cvalue%3Afunction%20toggleClass(name%2Cbool%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bif(arguments.length%3D%3D1)%7Bbool%3D!node.classList.contains(name)%3B%7Dif(bool)%7Bnode.classList.add(name)%3B%7Delse%7Bnode.classList.remove(name)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Cross-platform%20helper%20for%20setting%20an%20element's%20CSS%20%60transform%60%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20transformText%20Transform%20setting.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20the%20transform%20to.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'transform'%2Cvalue%3Afunction%20transform(transformText%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bnode.style.webkitTransform%3DtransformText%3Bnode.style.transform%3DtransformText%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Cross-platform%20helper%20for%20setting%20an%20element's%20CSS%20%60translate3d%60%0A%20%20%20%20%20%20%20*%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%20X%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%20Y%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20z%20Z%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20the%20transform%20to.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'translate3d'%2Cvalue%3Afunction%20translate3d(x%2Cy%2Cz%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bthis.transform('translate3d('%2Bx%2B'%2C'%2By%2B'%2C'%2Bz%2B')'%2Cnode)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20an%20array%2C%20if%20it%20exists.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20the%20array%20is%20specified%20by%20path%2C%20a%20change%20notification%20is%0A%20%20%20%20%20%20%20*%20generated%2C%20so%20that%20observers%2C%20data%20bindings%20and%20computed%0A%20%20%20%20%20%20%20*%20properties%20watching%20that%20path%20can%20update.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20the%20array%20is%20passed%20directly%2C%20**no%20change%0A%20%20%20%20%20%20%20*%20notification%20is%20generated**.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20arrayOrPath%20Path%20to%20array%20from%20which%20to%20remove%20the%20item%0A%20%20%20%20%20%20%20*%20%20%20(or%20the%20array%20itself).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20containing%20item%20removed.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'arrayDelete'%2Cvalue%3Afunction%20arrayDelete(arrayOrPath%2Citem)%7Bvar%20index%3Dvoid%200%3Bif(Array.isArray(arrayOrPath))%7Bindex%3DarrayOrPath.indexOf(item)%3Bif(index%3E%3D0)%7Breturn%20arrayOrPath.splice(index%2C1)%3B%7D%7Delse%7Bvar%20arr%3DPolymer.Path.get(this%2CarrayOrPath)%3Bindex%3Darr.indexOf(item)%3Bif(index%3E%3D0)%7Breturn%20this.splice(arrayOrPath%2Cindex%2C1)%3B%7D%7Dreturn%20null%3B%7D%2F%2F%20logging%0A%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.log%60%2F%60warn%60%2F%60error%60%20as%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20level%20One%20of%20'log'%2C%20'warn'%2C%20'error'%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_logger'%2Cvalue%3Afunction%20_logger(level%2Cargs)%7Bvar%20_console%3B%2F%2F%20accept%20%5B'foo'%2C%20'bar'%5D%20and%20%5B%5B'foo'%2C%20'bar'%5D%5D%0Aif(Array.isArray(args)%26%26args.length%3D%3D%3D1%26%26Array.isArray(args%5B0%5D))%7Bargs%3Dargs%5B0%5D%3B%7Dswitch(level)%7Bcase'log'%3Acase'warn'%3Acase'error'%3A(_console%3Dconsole)%5Blevel%5D.apply(_console%2C_toConsumableArray(args))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.log%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_log'%2Cvalue%3Afunction%20_log()%7Bfor(var%20_len%3Darguments.length%2Cargs%3DArray(_len)%2C_key%3D0%3B_key%3C_len%3B_key%2B%2B)%7Bargs%5B_key%5D%3Darguments%5B_key%5D%3B%7Dthis._logger('log'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.warn%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_warn'%2Cvalue%3Afunction%20_warn()%7Bfor(var%20_len2%3Darguments.length%2Cargs%3DArray(_len2)%2C_key2%3D0%3B_key2%3C_len2%3B_key2%2B%2B)%7Bargs%5B_key2%5D%3Darguments%5B_key2%5D%3B%7Dthis._logger('warn'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.error%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_error'%2Cvalue%3Afunction%20_error()%7Bfor(var%20_len3%3Darguments.length%2Cargs%3DArray(_len3)%2C_key3%3D0%3B_key3%3C_len3%3B_key3%2B%2B)%7Bargs%5B_key3%5D%3Darguments%5B_key3%5D%3B%7Dthis._logger('error'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Formats%20a%20message%20using%20the%20element%20type%20an%20a%20method%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Method%20name%20to%20associate%20with%20message%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20with%20formatting%20information%20for%20%60console%60%0A%20%20%20%20%20%20%20*%20%20%20logging.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_logf'%2Cvalue%3Afunction%20_logf(methodName)%7Bfor(var%20_len4%3Darguments.length%2Cargs%3DArray(_len4%3E1%3F_len4-1%3A0)%2C_key4%3D1%3B_key4%3C_len4%3B_key4%2B%2B)%7Bargs%5B_key4-1%5D%3Darguments%5B_key4%5D%3B%7Dreturn%5B'%5B%25s%3A%3A%25s%5D'%2Cthis.is%2CmethodName%5D.concat(args)%3B%7D%7D%2C%7Bkey%3A'domHost'%2Cget%3Afunction%20get()%7Bvar%20root%3Dthis.getRootNode()%3Breturn%20root%20instanceof%20DocumentFragment%3F%2F**%20%40type%20%7BShadowRoot%7D%20*%2Froot.host%3Aroot%3B%7D%7D%5D%2C%5B%7Bkey%3A'importMeta'%2Cget%3Afunction%20get()%7Breturn%20this.prototype.importMeta%3B%7D%7D%5D)%3Breturn%20LegacyElement%3B%7D(legacyElementBase)%3BLegacyElement.prototype.is%3D''%3Breturn%20LegacyElement%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Flegacy-element-mixin.html.js%0A",
            "resourceBytes": 37092,
            "encodedBytes": 0,
            "unusedBytes": 11599
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20lifecycleProps%3D%7Battached%3Atrue%2Cdetached%3Atrue%2Cready%3Atrue%2Ccreated%3Atrue%2CbeforeRegister%3Atrue%2Cregistered%3Atrue%2CattributeChanged%3Atrue%2Clisteners%3Atrue%2ChostAttributes%3Atrue%7D%3Bvar%20excludeOnInfo%3D%7Battached%3Atrue%2Cdetached%3Atrue%2Cready%3Atrue%2Ccreated%3Atrue%2CbeforeRegister%3Atrue%2Cregistered%3Atrue%2CattributeChanged%3Atrue%2Cbehaviors%3Atrue%2C_noAccessors%3Atrue%7D%3Bvar%20excludeOnBehaviors%3DObject.assign(%7Blisteners%3Atrue%2ChostAttributes%3Atrue%2Cproperties%3Atrue%2Cobservers%3Atrue%7D%2CexcludeOnInfo)%3Bfunction%20copyProperties(source%2Ctarget%2CexcludeProps)%7Bvar%20noAccessors%3Dsource._noAccessors%3Bfor(var%20p%20in%20source)%7Bif(!(p%20in%20excludeProps))%7Bif(noAccessors)%7Btarget%5Bp%5D%3Dsource%5Bp%5D%3B%7Delse%7Bvar%20pd%3DObject.getOwnPropertyDescriptor(source%2Cp)%3Bif(pd)%7B%2F%2F%20ensure%20property%20is%20configurable%20so%20that%20a%20later%20behavior%20can%0A%2F%2F%20re-configure%20it.%0Apd.configurable%3Dtrue%3BObject.defineProperty(target%2Cp%2Cpd)%3B%7D%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20Applies%20a%20%22legacy%22%20behavior%20or%20array%20of%20behaviors%20to%20the%20provided%20class.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20this%20method%20will%20automatically%20also%20apply%20the%20%60Polymer.LegacyElementMixin%60%0A%20%20%20%20%20*%20to%20ensure%20that%20any%20legacy%20behaviors%20can%20rely%20on%20legacy%20Polymer%20API%20on%0A%20%20%20%20%20*%20the%20underlying%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40template%20T%0A%20%20%20%20%20*%20%40param%20%7B!Object%7C!Array%3C!Object%3E%7D%20behaviors%20Behavior%20object%20or%20array%20of%20behaviors.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(new%3AT)%7D%20klass%20Element%20class.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AT)%7D%20Returns%20a%20new%20Element%20class%20extended%20by%20the%0A%20%20%20%20%20*%20passed%20in%20%60behaviors%60%20and%20also%20by%20%60Polymer.LegacyElementMixin%60.%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%2C%20checkTypes%7D%0A%20%20%20%20%20*%2Ffunction%20mixinBehaviors(behaviors%2Cklass)%7Breturn%20GenerateClassFromInfo(%7B%7D%2CPolymer.LegacyElementMixin(klass)%2Cbehaviors)%3B%7D%2F%2F%20NOTE%3A%0A%2F%2F%201.x%0A%2F%2F%20Behaviors%20were%20mixed%20in%20*in%20reverse%20order*%20and%20de-duped%20on%20the%20fly.%0A%2F%2F%20The%20rule%20was%20that%20behavior%20properties%20were%20copied%20onto%20the%20element%0A%2F%2F%20prototype%20if%20and%20only%20if%20the%20property%20did%20not%20already%20exist.%0A%2F%2F%20Given%3A%20Polymer%7B%20behaviors%3A%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%7D%2C%20property%20copy%20order%20was%3A%0A%2F%2F%20(1)%2C%20B%2C%20(2)%2C%20A%2C%20(3)%20C.%20This%20means%20prototype%20properties%20win%20over%0A%2F%2F%20B%20properties%20win%20over%20A%20win%20over%20C.%20This%20mirrors%20what%20would%20happen%0A%2F%2F%20with%20inheritance%20if%20element%20extended%20B%20extended%20A%20extended%20C.%0A%2F%2F%0A%2F%2F%20Again%20given%2C%20Polymer%7B%20behaviors%3A%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%7D%2C%20the%20resulting%0A%2F%2F%20%60behaviors%60%20array%20was%20%5BC%2C%20A%2C%20B%5D.%0A%2F%2F%20Behavior%20lifecycle%20methods%20were%20called%20in%20behavior%20array%20order%0A%2F%2F%20followed%20by%20the%20element%2C%20e.g.%20(1)%20C.created%2C%20(2)%20A.created%2C%0A%2F%2F%20(3)%20B.created%2C%20(4)%20element.created.%20There%20was%20no%20support%20for%0A%2F%2F%20super%2C%20and%20%22super-behavior%22%20methods%20were%20callable%20only%20by%20name).%0A%2F%2F%0A%2F%2F%202.x%0A%2F%2F%20Behaviors%20are%20made%20into%20proper%20mixins%20which%20live%20in%20the%0A%2F%2F%20element's%20prototype%20chain.%20Behaviors%20are%20placed%20in%20the%20element%20prototype%0A%2F%2F%20eldest%20to%20youngest%20and%20de-duped%20youngest%20to%20oldest%3A%0A%2F%2F%20So%2C%20first%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%20becomes%20%5BC%2C%20A%2C%20B%5D%20then%2C%0A%2F%2F%20the%20element%20prototype%20becomes%20(oldest)%20(1)%20Polymer.Element%2C%20(2)%20class(C)%2C%0A%2F%2F%20(3)%20class(A)%2C%20(4)%20class(B)%2C%20(5)%20class(Polymer(%7B...%7D)).%0A%2F%2F%20Result%3A%0A%2F%2F%20This%20means%20element%20properties%20win%20over%20B%20properties%20win%20over%20A%20win%0A%2F%2F%20over%20C.%20(same%20as%201.x)%0A%2F%2F%20If%20lifecycle%20is%20called%20(super%20then%20me)%2C%20order%20is%0A%2F%2F%20(1)%20C.created%2C%20(2)%20A.created%2C%20(3)%20B.created%2C%20(4)%20element.created%0A%2F%2F%20(again%20same%20as%201.x)%0Afunction%20applyBehaviors(proto%2Cbehaviors%2Clifecycle)%7Bfor(var%20i%3D0%3Bi%3Cbehaviors.length%3Bi%2B%2B)%7BapplyInfo(proto%2Cbehaviors%5Bi%5D%2Clifecycle%2CexcludeOnBehaviors)%3B%7D%7Dfunction%20applyInfo(proto%2Cinfo%2Clifecycle%2CexcludeProps)%7BcopyProperties(info%2Cproto%2CexcludeProps)%3Bfor(var%20p%20in%20lifecycleProps)%7Bif(info%5Bp%5D)%7Blifecycle%5Bp%5D%3Dlifecycle%5Bp%5D%7C%7C%5B%5D%3Blifecycle%5Bp%5D.push(info%5Bp%5D)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%7D%20behaviors%20List%20of%20behaviors%20to%20flatten.%0A%20%20%20%20%20*%20%40param%20%7BArray%3D%7D%20list%20Target%20list%20to%20flatten%20behaviors%20into.%0A%20%20%20%20%20*%20%40param%20%7BArray%3D%7D%20exclude%20List%20of%20behaviors%20to%20exclude%20from%20the%20list.%0A%20%20%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20the%20list%20of%20flattened%20behaviors.%0A%20%20%20%20%20*%2Ffunction%20flattenBehaviors(behaviors%2Clist%2Cexclude)%7Blist%3Dlist%7C%7C%5B%5D%3Bfor(var%20i%3Dbehaviors.length-1%3Bi%3E%3D0%3Bi--)%7Bvar%20b%3Dbehaviors%5Bi%5D%3Bif(b)%7Bif(Array.isArray(b))%7BflattenBehaviors(b%2Clist)%3B%7Delse%7B%2F%2F%20dedup%0Aif(list.indexOf(b)%3C0%26%26(!exclude%7C%7Cexclude.indexOf(b)%3C0))%7Blist.unshift(b)%3B%7D%7D%7Delse%7Bconsole.warn('behavior%20is%20null%2C%20check%20for%20missing%20or%20404%20import')%3B%7D%7Dreturn%20list%3B%7D%2F*%20Note%20about%20construction%20and%20extension%20of%20legacy%20classes.%0A%20%20%20%20%20%20%5BChanged%20in%20Q4%202018%20to%20optimize%20performance.%5D%0A%0A%20%20%20%20%20%20When%20calling%20%60Polymer%60%20or%20%60mixinBehaviors%60%2C%20the%20generated%20class%20below%20is%0A%20%20%20%20%20%20made.%20The%20list%20of%20behaviors%20was%20previously%20made%20into%20one%20generated%20class%20per%0A%20%20%20%20%20%20behavior%2C%20but%20this%20is%20no%20longer%20the%20case%20as%20behaviors%20are%20now%20called%0A%20%20%20%20%20%20manually.%20Note%2C%20there%20may%20*still*%20be%20multiple%20generated%20classes%20in%20the%0A%20%20%20%20%20%20element's%20prototype%20chain%20if%20extension%20is%20used%20with%20%60mixinBehaviors%60.%0A%0A%20%20%20%20%20%20The%20generated%20class%20is%20directly%20tied%20to%20the%20info%20object%20and%20behaviors%0A%20%20%20%20%20%20used%20to%20create%20it.%20That%20list%20of%20behaviors%20is%20filtered%20so%20it's%20only%20the%0A%20%20%20%20%20%20behaviors%20not%20active%20on%20the%20superclass.%20In%20order%20to%20call%20through%20to%20the%0A%20%20%20%20%20%20entire%20list%20of%20lifecycle%20methods%2C%20it's%20important%20to%20call%20%60super%60.%0A%0A%20%20%20%20%20%20The%20element's%20%60properties%60%20and%20%60observers%60%20are%20controlled%20via%20the%20finalization%0A%20%20%20%20%20%20mechanism%20provided%20by%20%60PropertiesMixin%60.%20%60Properties%60%20and%20%60observers%60%20are%0A%20%20%20%20%20%20collected%20by%20manually%20traversing%20the%20prototype%20chain%20and%20merging.%0A%0A%20%20%20%20%20%20To%20limit%20changes%2C%20the%20%60_registered%60%20method%20is%20called%20via%20%60_initializeProperties%60%0A%20%20%20%20%20%20and%20not%20%60_finalizeClass%60.%0A%20%20%20%20*%2F%2F**%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Polymer%20info%20object%0A%20%20%20%20%20*%20%40param%20%7Bfunction(new%3AHTMLElement)%7D%20Base%20base%20class%20to%20extend%20with%20info%20object%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20behaviors%20behaviors%20to%20copy%20into%20the%20element%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AHTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40suppress%20%7BcheckTypes%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20GenerateClassFromInfo(info%2CBase%2Cbehaviors)%7B%2F%2F%20manages%20behavior%20and%20lifecycle%20processing%20(filled%20in%20after%20class%20definition)%0Avar%20behaviorList%3Dvoid%200%3Bvar%20lifecycle%3D%7B%7D%3B%2F**%20%40private%20*%2Fvar%20PolymerGenerated%3Dfunction(_Base)%7B_inherits(PolymerGenerated%2C_Base)%3Bfunction%20PolymerGenerated()%7B_classCallCheck(this%2CPolymerGenerated)%3Breturn%20_possibleConstructorReturn(this%2C(PolymerGenerated.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated)).apply(this%2Carguments))%3B%7D_createClass(PolymerGenerated%2C%5B%7Bkey%3A'created'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20created()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'created'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.created%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_registered'%2Cvalue%3Afunction%20_registered()%7B%2F*%20NOTE%3A%20%60beforeRegister%60%20is%20called%20here%20for%20bc%2C%20but%20the%20behavior%0A%20%20%20%20%20%20%20%20%20%20%20%20is%20different%20than%20in%201.x.%20In%201.0%2C%20the%20method%20was%20called%20*after*%0A%20%20%20%20%20%20%20%20%20%20%20%20mixing%20prototypes%20together%20but%20*before*%20processing%20of%20meta-objects.%0A%20%20%20%20%20%20%20%20%20%20%20%20However%2C%20dynamic%20effects%20can%20still%20be%20set%20here%20and%20can%20be%20done%20either%0A%20%20%20%20%20%20%20%20%20%20%20%20in%20%60beforeRegister%60%20or%20%60registered%60.%20It%20is%20no%20longer%20possible%20to%20set%0A%20%20%20%20%20%20%20%20%20%20%20%20%60is%60%20in%20%60beforeRegister%60%20as%20you%20could%20in%201.x.%0A%20%20%20%20%20%20%20%20%20%20*%2F%2F%2F%20only%20proceed%20if%20the%20generated%20class'%20prototype%20has%20not%20been%20registered.%0Avar%20generatedProto%3DPolymerGenerated.prototype%3Bif(!generatedProto.hasOwnProperty('__hasRegisterFinished'))%7BgeneratedProto.__hasRegisterFinished%3Dtrue%3B%2F%2F%20ensure%20superclass%20is%20registered%20first.%0A_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_registered'%2Cthis).call(this)%3B%2F%2F%20copy%20properties%20onto%20the%20generated%20class%20lazily%20if%20we're%20optimizing%2C%0Aif(Polymer.legacyOptimizations)%7BcopyPropertiesToProto(generatedProto)%3B%7D%2F%2F%20make%20sure%20legacy%20lifecycle%20is%20called%20on%20the%20*element*'s%20prototype%0A%2F%2F%20and%20not%20the%20generated%20class%20prototype%3B%20if%20the%20element%20has%20been%0A%2F%2F%20extended%2C%20these%20are%20*not*%20the%20same.%0Avar%20proto%3DObject.getPrototypeOf(this)%3Bvar%20list%3Dlifecycle.beforeRegister%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(proto)%3B%7D%7Dlist%3Dlifecycle.registered%3Bif(list)%7Bfor(var%20_i%3D0%3B_i%3Clist.length%3B_i%2B%2B)%7Blist%5B_i%5D.call(proto)%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_applyListeners'%2Cvalue%3Afunction%20_applyListeners()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_applyListeners'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.listeners%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Bvar%20listeners%3Dlist%5Bi%5D%3Bif(listeners)%7Bfor(var%20l%20in%20listeners)%7Bthis._addMethodEventListenerToNode(this%2Cl%2Clisteners%5Bl%5D)%3B%7D%7D%7D%7D%7D%2F%2F%20note%3A%20exception%20to%20%22super%20then%20me%22%20rule%3B%0A%2F%2F%20do%20work%20before%20calling%20super%20so%20that%20super%20attributes%0A%2F%2F%20only%20apply%20if%20not%20already%20set.%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttributes'%2Cvalue%3Afunction%20_ensureAttributes()%7Bvar%20list%3Dlifecycle.hostAttributes%3Bif(list)%7Bfor(var%20i%3Dlist.length-1%3Bi%3E%3D0%3Bi--)%7Bvar%20hostAttributes%3Dlist%5Bi%5D%3Bfor(var%20a%20in%20hostAttributes)%7Bthis._ensureAttribute(a%2ChostAttributes%5Ba%5D)%3B%7D%7D%7D_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_ensureAttributes'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'ready'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.ready%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attached'%2Cvalue%3Afunction%20attached()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'attached'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.attached%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'detached'%2Cvalue%3Afunction%20detached()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'detached'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.detached%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Implements%20native%20Custom%20Elements%20%60attributeChangedCallback%60%20to%0A%20%20%20%20%20%20%20%20%20*%20set%20an%20attribute%20value%20to%20a%20property%20via%20%60_attributeToProperty%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute%20that%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20New%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChanged'%2Cvalue%3Afunction%20attributeChanged(name%2Cold%2Cvalue)%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'attributeChanged'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.attributeChanged%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this%2Cname%2Cold%2Cvalue)%3B%7D%7D%7D%7D%5D%2C%5B%7Bkey%3A'_finalizeClass'%2C%2F%2F%20explicitly%20not%20calling%20super._finalizeClass%0Avalue%3Afunction%20_finalizeClass()%7B%2F%2F%20if%20calling%20via%20a%20subclass%20that%20hasn't%20been%20generated%2C%20pass%20through%20to%20super%0Aif(!this.hasOwnProperty(window.JSCompiler_renameProperty('generatedFrom'%2Cthis)))%7B_get(PolymerGenerated.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated)%2C'_finalizeClass'%2Cthis).call(this)%3B%7Delse%7B%2F%2F%20interleave%20properties%20and%20observers%20per%20behavior%20and%20%60info%60%0Aif(behaviorList)%7Bfor(var%20i%3D0%2Cb%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7Bb%3DbehaviorList%5Bi%5D%3Bif(b.properties)%7Bthis.createProperties(b.properties)%3B%7Dif(b.observers)%7Bthis.createObservers(b.observers%2Cb.properties)%3B%7D%7D%7Dif(info.properties)%7Bthis.createProperties(info.properties)%3B%7Dif(info.observers)%7Bthis.createObservers(info.observers%2Cinfo.properties)%3B%7D%2F%2F%20make%20sure%20to%20prepare%20the%20element%20template%0Athis._prepareTemplate()%3B%7D%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Bvar%20properties%3D%7B%7D%3Bif(behaviorList)%7Bfor(var%20i%3D0%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7BObject.assign(properties%2CbehaviorList%5Bi%5D.properties)%3B%7D%7DObject.assign(properties%2Cinfo.properties)%3Breturn%20properties%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Bvar%20observers%3D%5B%5D%3Bif(behaviorList)%7Bfor(var%20i%3D0%2Cb%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7Bb%3DbehaviorList%5Bi%5D%3Bif(b.observers)%7Bobservers%3Dobservers.concat(b.observers)%3B%7D%7D%7Dif(info.observers)%7Bobservers%3Dobservers.concat(info.observers)%3B%7Dreturn%20observers%3B%7D%7D%5D)%3Breturn%20PolymerGenerated%3B%7D(Base)%3B%2F%2F%20apply%20behaviors%2C%20note%20actual%20copying%20is%20done%20lazily%20at%20first%20instance%20creation%0Aif(behaviors)%7B%2F%2F%20NOTE%3A%20ensure%20the%20behavior%20is%20extending%20a%20class%20with%0A%2F%2F%20legacy%20element%20api.%20This%20is%20necessary%20since%20behaviors%20expect%20to%20be%20able%0A%2F%2F%20to%20access%201.x%20legacy%20api.%0Aif(!Array.isArray(behaviors))%7Bbehaviors%3D%5Bbehaviors%5D%3B%7Dvar%20superBehaviors%3DBase.prototype.behaviors%3B%2F%2F%20get%20flattened%2C%20deduped%20list%20of%20behaviors%20*not*%20already%20on%20super%20class%0AbehaviorList%3DflattenBehaviors(behaviors%2Cnull%2CsuperBehaviors)%3BPolymerGenerated.prototype.behaviors%3DsuperBehaviors%3FsuperBehaviors.concat(behaviors)%3AbehaviorList%3B%7Dvar%20copyPropertiesToProto%3Dfunction%20copyPropertiesToProto(proto)%7Bif(behaviorList)%7BapplyBehaviors(proto%2CbehaviorList%2Clifecycle)%3B%7DapplyInfo(proto%2Cinfo%2Clifecycle%2CexcludeOnInfo)%3B%7D%3B%2F%2F%20copy%20properties%20if%20we're%20not%20optimizing%0Aif(!Polymer.legacyOptimizations)%7BcopyPropertiesToProto(PolymerGenerated.prototype)%3B%7DPolymerGenerated.generatedFrom%3Dinfo%3Breturn%20PolymerGenerated%3B%7D%2F**%0A%20%20%20%20%20*%20Generates%20a%20class%20that%20extends%20%60Polymer.LegacyElement%60%20based%20on%20the%0A%20%20%20%20%20*%20provided%20info%20object.%20%20Metadata%20objects%20on%20the%20%60info%60%20object%0A%20%20%20%20%20*%20(%60properties%60%2C%20%60observers%60%2C%20%60listeners%60%2C%20%60behaviors%60%2C%20%60is%60)%20are%20used%0A%20%20%20%20%20*%20for%20Polymer's%20meta-programming%20systems%2C%20and%20any%20functions%20are%20copied%0A%20%20%20%20%20*%20to%20the%20generated%20class.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Valid%20%22metadata%22%20values%20are%20as%20follows%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60is%60%3A%20String%20providing%20the%20tag%20name%20to%20register%20the%20element%20under.%20In%0A%20%20%20%20%20*%20addition%2C%20if%20a%20%60dom-module%60%20with%20the%20same%20id%20exists%2C%20the%20first%20template%0A%20%20%20%20%20*%20in%20that%20%60dom-module%60%20will%20be%20stamped%20into%20the%20shadow%20root%20of%20this%20element%2C%0A%20%20%20%20%20*%20with%20support%20for%20declarative%20event%20listeners%20(%60on-...%60)%2C%20Polymer%20data%0A%20%20%20%20%20*%20bindings%20(%60%5B%5B...%5D%5D%60%20and%20%60%7B%7B...%7D%7D%60)%2C%20and%20id-based%20node%20finding%20into%0A%20%20%20%20%20*%20%60this.%24%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60properties%60%3A%20Object%20describing%20property-related%20metadata%20used%20by%20Polymer%0A%20%20%20%20%20*%20features%20(key%3A%20property%20names%2C%20value%3A%20object%20containing%20property%20metadata).%0A%20%20%20%20%20*%20Valid%20keys%20in%20per-property%20metadata%20include%3A%0A%20%20%20%20%20*%20-%20%60type%60%20(String%7CNumber%7CObject%7CArray%7C...)%3A%20Used%20by%0A%20%20%20%20%20*%20%20%20%60attributeChangedCallback%60%20to%20determine%20how%20string-based%20attributes%0A%20%20%20%20%20*%20%20%20are%20deserialized%20to%20JavaScript%20property%20values.%0A%20%20%20%20%20*%20-%20%60notify%60%20(boolean)%3A%20Causes%20a%20change%20in%20the%20property%20to%20fire%20a%0A%20%20%20%20%20*%20%20%20non-bubbling%20event%20called%20%60%3Cproperty%3E-changed%60.%20Elements%20that%20have%0A%20%20%20%20%20*%20%20%20enabled%20two-way%20binding%20to%20the%20property%20use%20this%20event%20to%20observe%20changes.%0A%20%20%20%20%20*%20-%20%60readOnly%60%20(boolean)%3A%20Creates%20a%20getter%20for%20the%20property%2C%20but%20no%20setter.%0A%20%20%20%20%20*%20%20%20To%20set%20a%20read-only%20property%2C%20use%20the%20private%20setter%20method%0A%20%20%20%20%20*%20%20%20%60_setProperty(property%2C%20value)%60.%0A%20%20%20%20%20*%20-%20%60observer%60%20(string)%3A%20Observer%20method%20name%20that%20will%20be%20called%20when%0A%20%20%20%20%20*%20%20%20the%20property%20changes.%20The%20arguments%20of%20the%20method%20are%0A%20%20%20%20%20*%20%20%20%60(value%2C%20previousValue)%60.%0A%20%20%20%20%20*%20-%20%60computed%60%20(string)%3A%20String%20describing%20method%20and%20dependent%20properties%0A%20%20%20%20%20*%20%20%20for%20computing%20the%20value%20of%20this%20property%20(e.g.%20%60'computeFoo(bar%2C%20zot)'%60).%0A%20%20%20%20%20*%20%20%20Computed%20properties%20are%20read-only%20by%20default%20and%20can%20only%20be%20changed%0A%20%20%20%20%20*%20%20%20via%20the%20return%20value%20of%20the%20computing%20method.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60observers%60%3A%20Array%20of%20strings%20describing%20multi-property%20observer%20methods%0A%20%20%20%20%20*%20%20and%20their%20dependent%20properties%20(e.g.%20%60'observeABC(a%2C%20b%2C%20c)'%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60listeners%60%3A%20Object%20describing%20event%20listeners%20to%20be%20added%20to%20each%0A%20%20%20%20%20*%20%20instance%20of%20this%20element%20(key%3A%20event%20name%2C%20value%3A%20method%20name).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60behaviors%60%3A%20Array%20of%20additional%20%60info%60%20objects%20containing%20metadata%0A%20%20%20%20%20*%20and%20callbacks%20in%20the%20same%20format%20as%20the%20%60info%60%20object%20here%20which%20are%0A%20%20%20%20%20*%20merged%20into%20this%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60hostAttributes%60%3A%20Object%20listing%20attributes%20to%20be%20applied%20to%20the%20host%0A%20%20%20%20%20*%20%20once%20created%20(key%3A%20attribute%20name%2C%20value%3A%20attribute%20value).%20%20Values%0A%20%20%20%20%20*%20%20are%20serialized%20based%20on%20the%20type%20of%20the%20value.%20%20Host%20attributes%20should%0A%20%20%20%20%20*%20%20generally%20be%20limited%20to%20attributes%20such%20as%20%60tabIndex%60%20and%20%60aria-...%60.%0A%20%20%20%20%20*%20%20Attributes%20in%20%60hostAttributes%60%20are%20only%20applied%20if%20a%20user-supplied%0A%20%20%20%20%20*%20%20attribute%20is%20not%20already%20present%20(attributes%20in%20markup%20override%0A%20%20%20%20%20*%20%20%60hostAttributes%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20In%20addition%2C%20the%20following%20Polymer-specific%20callbacks%20may%20be%20provided%3A%0A%20%20%20%20%20*%20-%20%60registered%60%3A%20called%20after%20first%20instance%20of%20this%20element%2C%0A%20%20%20%20%20*%20-%20%60created%60%3A%20called%20during%20%60constructor%60%0A%20%20%20%20%20*%20-%20%60attached%60%3A%20called%20during%20%60connectedCallback%60%0A%20%20%20%20%20*%20-%20%60detached%60%3A%20called%20during%20%60disconnectedCallback%60%0A%20%20%20%20%20*%20-%20%60ready%60%3A%20called%20before%20first%20%60attached%60%2C%20after%20all%20properties%20of%0A%20%20%20%20%20*%20%20%20this%20element%20have%20been%20propagated%20to%20its%20template%20and%20all%20observers%0A%20%20%20%20%20*%20%20%20have%20run%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Object%20containing%20Polymer%20metadata%20and%20functions%0A%20%20%20%20%20*%20%20%20to%20become%20class%20methods.%0A%20%20%20%20%20*%20%40template%20T%0A%20%20%20%20%20*%20%40param%20%7Bfunction(T)%3AT%7D%20mixin%20Optional%20mixin%20to%20apply%20to%20legacy%20base%20class%0A%20%20%20%20%20*%20%20%20before%20extending%20with%20Polymer%20metaprogramming.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AHTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%2FPolymer.Class%3Dfunction(info%2Cmixin)%7Bif(!info)%7Bconsole.warn('Polymer.Class%20requires%20%60info%60%20argument')%3B%7Dvar%20klass%3Dmixin%3Fmixin(Polymer.LegacyElementMixin(HTMLElement))%3APolymer.LegacyElementMixin(HTMLElement)%3Bklass%3DGenerateClassFromInfo(info%2Cklass%2Cinfo.behaviors)%3Bif(info._enableDisableUpgrade)%7Bklass%3DPolymer.DisableUpgradeMixin(klass)%3B%7D%2F%2F%20decorate%20klass%20with%20registration%20info%0Aklass.is%3Dklass.prototype.is%3Dinfo.is%3Breturn%20klass%3B%7D%3BPolymer.mixinBehaviors%3DmixinBehaviors%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fclass.html.js%0A",
            "resourceBytes": 19044,
            "encodedBytes": 0,
            "unusedBytes": 10418
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20Legacy%20class%20factory%20and%20registration%20helper%20for%20defining%20Polymer%0A%20%20%20%20%20*%20elements.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20equivalent%20to%0A%20%20%20%20%20*%20%60customElements.define(info.is%2C%20Polymer.Class(info))%3B%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20See%20%60Polymer.Class%60%20for%20details%20on%20valid%20legacy%20metadata%20format%20for%20%60info%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40global%0A%20%20%20%20%20*%20%40override%0A%20%20%20%20%20*%20%40function%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Object%20containing%20Polymer%20metadata%20and%20functions%0A%20%20%20%20%20*%20%20%20to%20become%20class%20methods.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3A%20HTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40suppress%20%7Bduplicate%2C%20invalidCasts%2C%20checkTypes%7D%0A%20%20%20%20%20*%2Fwindow.Polymer._polymerFn%3Dfunction(info)%7B%2F%2F%20if%20input%20is%20a%20%60class%60%20(aka%20a%20function%20with%20a%20prototype)%2C%20use%20the%20prototype%0A%2F%2F%20remember%20that%20the%20%60constructor%60%20will%20never%20be%20called%0Avar%20klass%3Dvoid%200%3Bif(typeof%20info%3D%3D%3D'function')%7Bklass%3Dinfo%3B%7Delse%7Bklass%3DPolymer.Class(info)%3B%7DcustomElements.define(klass.is%2C%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fklass)%3Breturn%20klass%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fpolymer-fn.html.js%0A",
            "resourceBytes": 1111,
            "encodedBytes": 0,
            "unusedBytes": 318
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F%2F%20Common%20implementation%20for%20mixin%20%26%20behavior%0Afunction%20mutablePropertyChange(inst%2Cproperty%2Cvalue%2Cold%2CmutableData)%7Bvar%20isObject%3Dvoid%200%3Bif(mutableData)%7BisObject%3D(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D%3D'object'%26%26value!%3D%3Dnull%3B%2F%2F%20Pull%20%60old%60%20for%20Objects%20from%20temp%20cache%2C%20but%20treat%20%60null%60%20as%20a%20primitive%0Aif(isObject)%7Bold%3Dinst.__dataTemp%5Bproperty%5D%3B%7D%7D%2F%2F%20Strict%20equality%20check%2C%20but%20return%20false%20for%20NaN%3D%3D%3DNaN%0Avar%20shouldChange%3Dold!%3D%3Dvalue%26%26(old%3D%3D%3Dold%7C%7Cvalue%3D%3D%3Dvalue)%3B%2F%2F%20Objects%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%0A%2F%2F%20turn)%2C%20which%20is%20used%20for%20dirty-checking%0Aif(isObject%26%26shouldChange)%7Binst.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Dreturn%20shouldChange%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%20arrays%0A%20%20%20*%20(always%20consider%20them%20to%20be%20%22dirty%22)%2C%20for%20use%20on%20elements%20utilizing%0A%20%20%20*%20%60Polymer.PropertyEffects%60%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20cause%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20apply%20this%20mixin%20or%20enable%20the%0A%20%20%20*%20%60Polymer.OptionalMutableData%60%20mixin.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20make%20the%20dirty%20check%20strategy%20configurable%2C%20see%0A%20%20%20*%20%60Polymer.OptionalMutableData%60.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20as%20opposed%20to%20using%20strict%20dirty%20checking%20with%20immutable%0A%20%20%20*%20patterns%20or%20Polymer's%20path%20notification%20API.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20to%20skip%20strict%20dirty-checking%20for%20objects%0A%20%20%20*%20%20%20and%20arrays%0A%20%20%20*%2FPolymer.MutableData%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%2Fvar%20MutableData%3Dfunction(_superClass)%7B_inherits(MutableData%2C_superClass)%3Bfunction%20MutableData()%7B_classCallCheck(this%2CMutableData)%3Breturn%20_possibleConstructorReturn(this%2C(MutableData.__proto__%7C%7CObject.getPrototypeOf(MutableData)).apply(this%2Carguments))%3B%7D_createClass(MutableData%2C%5B%7Bkey%3A'_shouldPropertyChange'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%20cache%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Ctrue)%3B%7D%7D%5D)%3Breturn%20MutableData%3B%7D(superClass)%3Breturn%20MutableData%3B%7D)%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20to%20add%20the%20optional%20ability%20to%20skip%20strict%0A%20%20%20*%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20*%20%22dirty%22)%20by%20setting%20a%20%60mutable-data%60%20attribute%20on%20an%20element%20instance.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20allow%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20enable%20this%20mixin%20or%20apply%20the%0A%20%20%20*%20%60Polymer.MutableData%60%20mixin.%0A%20%20%20*%0A%20%20%20*%20While%20this%20mixin%20adds%20the%20ability%20to%20forgo%20Object%2FArray%20dirty%20checking%2C%0A%20%20%20*%20the%20%60mutableData%60%20flag%20defaults%20to%20false%20and%20must%20be%20set%20on%20the%20instance.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20by%20relying%20on%20%60mutableData%3A%20true%60%20as%20opposed%20to%20using%0A%20%20%20*%20strict%20dirty%20checking%20with%20immutable%20patterns%20or%20Polymer's%20path%20notification%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20to%20optionally%20skip%20strict%20dirty-checking%0A%20%20%20*%20%20%20for%20objects%20and%20arrays%0A%20%20%20*%2FPolymer.OptionalMutableData%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20%20%20*%2Fvar%20OptionalMutableData%3Dfunction(_superClass2)%7B_inherits(OptionalMutableData%2C_superClass2)%3Bfunction%20OptionalMutableData()%7B_classCallCheck(this%2COptionalMutableData)%3Breturn%20_possibleConstructorReturn(this%2C(OptionalMutableData.__proto__%7C%7CObject.getPrototypeOf(OptionalMutableData)).apply(this%2Carguments))%3B%7D_createClass(OptionalMutableData%2C%5B%7Bkey%3A'_shouldPropertyChange'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20%60this.mutableData%60%20is%20true%20on%20this%20instance%2C%20this%20method%0A%20%20%20%20%20%20%20*%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%20cache%0A%20%20%20%20%20%20%20*%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Cthis.mutableData)%3B%7D%7D%5D%2C%5B%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20Instance-level%20flag%20for%20configuring%20the%20dirty-checking%20strategy%0A%20%20%20%20%20%20%20%20%20%20%20*%20for%20this%20element.%20%20When%20true%2C%20Objects%20and%20Arrays%20will%20skip%20dirty%0A%20%20%20%20%20%20%20%20%20%20%20*%20checking%2C%20otherwise%20strict%20equality%20checking%20will%20be%20used.%0A%20%20%20%20%20%20%20%20%20%20%20*%2FmutableData%3ABoolean%7D%3B%7D%7D%5D)%3Breturn%20OptionalMutableData%3B%7D(superClass)%3Breturn%20OptionalMutableData%3B%7D)%3B%2F%2F%20Export%20for%20use%20by%20legacy%20behavior%0APolymer.MutableData._mutablePropertyChange%3DmutablePropertyChange%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fmutable-data.html.js%0A",
            "resourceBytes": 10198,
            "encodedBytes": 0,
            "unusedBytes": 2679
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7Dfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F%2F%20Base%20class%20for%20HTMLTemplateElement%20extension%20that%20has%20property%20effects%0A%2F%2F%20machinery%20for%20propagating%20host%20properties%20to%20children.%20This%20is%20an%20ES5%0A%2F%2F%20class%20only%20because%20Babel%20(incorrectly)%20requires%20super()%20in%20the%20class%0A%2F%2F%20constructor%20even%20though%20no%20%60this%60%20is%20used%20and%20it%20returns%20an%20instance.%0Avar%20newInstance%3Dnull%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BHTMLTemplateElement%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20HTMLTemplateElementExtension()%7Breturn%20newInstance%3B%7DHTMLTemplateElementExtension.prototype%3DObject.create(HTMLTemplateElement.prototype%2C%7Bconstructor%3A%7Bvalue%3AHTMLTemplateElementExtension%2Cwritable%3Atrue%7D%7D)%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BHTMLTemplateElementExtension%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20DataTemplate%3DPolymer.PropertyEffects(HTMLTemplateElementExtension)%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%20%40extends%20%7BDataTemplate%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20MutableDataTemplate%3DPolymer.MutableData(DataTemplate)%3B%2F%2F%20Applies%20a%20DataTemplate%20subclass%20to%20a%20%3Ctemplate%3E%20instance%0Afunction%20upgradeTemplate(template%2Cconstructor)%7BnewInstance%3Dtemplate%3BObject.setPrototypeOf(template%2Cconstructor.prototype)%3Bnew%20constructor()%3BnewInstance%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Base%20class%20for%20TemplateInstance.%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertyEffects(function()%7Bfunction%20_class()%7B_classCallCheck(this%2C_class)%3B%7Dreturn%20_class%3B%7D())%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40customElement%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20TemplateInstanceBase%3Dfunction(_base)%7B_inherits(TemplateInstanceBase%2C_base)%3Bfunction%20TemplateInstanceBase(props)%7B_classCallCheck(this%2CTemplateInstanceBase)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(TemplateInstanceBase.__proto__%7C%7CObject.getPrototypeOf(TemplateInstanceBase)).call(this))%3B_this._configureProperties(props)%3B_this.root%3D_this._stampTemplate(_this.__dataHost)%3B%2F%2F%20Save%20list%20of%20stamped%20children%0Avar%20children%3D_this.children%3D%5B%5D%3Bfor(var%20n%3D_this.root.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bchildren.push(n)%3Bn.__templatizeInstance%3D_this%3B%7Dif(_this.__templatizeOwner%26%26_this.__templatizeOwner.__hideTemplateChildren__)%7B_this._showHideChildren(true)%3B%7D%2F%2F%20Flush%20props%20only%20when%20props%20are%20passed%20if%20instance%20props%20exist%0A%2F%2F%20or%20when%20there%20isn't%20instance%20props.%0Avar%20options%3D_this.__templatizeOptions%3Bif(props%26%26options.instanceProps%7C%7C!options.instanceProps)%7B_this._enableProperties()%3B%7Dreturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Configure%20the%20given%20%60props%60%20by%20calling%20%60_setPendingProperty%60.%20Also%0A%20%20%20%20%20%20%20*%20sets%20any%20properties%20stored%20in%20%60__hostProps%60.%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Object%20of%20property%20name-value%20pairs%20to%20set.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F_createClass(TemplateInstanceBase%2C%5B%7Bkey%3A'_configureProperties'%2Cvalue%3Afunction%20_configureProperties(props)%7Bvar%20options%3Dthis.__templatizeOptions%3Bif(options.forwardHostProp)%7Bfor(var%20hprop%20in%20this.__hostProps)%7Bthis._setPendingProperty(hprop%2Cthis.__dataHost%5B'_host_'%2Bhprop%5D)%3B%7D%7D%2F%2F%20Any%20instance%20props%20passed%20in%20the%20constructor%20will%20overwrite%20host%20props%3B%0A%2F%2F%20normally%20this%20would%20be%20a%20user%20error%20but%20we%20don't%20specifically%20filter%20them%0Afor(var%20iprop%20in%20props)%7Bthis._setPendingProperty(iprop%2Cprops%5Biprop%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Forwards%20a%20host%20property%20to%20this%20instance.%20%20This%20method%20should%20be%0A%20%20%20%20%20%20%20*%20called%20on%20instances%20from%20the%20%60options.forwardHostProp%60%20callback%0A%20%20%20%20%20%20%20*%20to%20propagate%20changes%20of%20host%20properties%20to%20each%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20enqueues%20the%20change%2C%20which%20are%20flushed%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20or%20path%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20the%20property%20to%20forward%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'forwardHostProp'%2Cvalue%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bif(this._setPendingPropertyOrPath(prop%2Cvalue%2Cfalse%2Ctrue))%7Bthis.__dataHost._enqueueClient(this)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addEventListenerToNode'%2Cvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bvar%20_this2%3Dthis%3Bif(this._methodHost%26%26this.__templatizeOptions.parentModel)%7B%2F%2F%20If%20this%20instance%20should%20be%20considered%20a%20parent%20model%2C%20decorate%0A%2F%2F%20events%20this%20template%20instance%20as%20%60model%60%0Athis._methodHost._addEventListenerToNode(node%2CeventName%2Cfunction(e)%7Be.model%3D_this2%3Bhandler(e)%3B%7D)%3B%7Delse%7B%2F%2F%20Otherwise%20delegate%20to%20the%20template's%20host%20(which%20could%20be)%0A%2F%2F%20another%20template%20instance%0Avar%20templateHost%3Dthis.__dataHost.__dataHost%3Bif(templateHost)%7BtemplateHost._addEventListenerToNode(node%2CeventName%2Chandler)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hide%20Set%20to%20true%20to%20hide%20the%20children%3B%0A%20%20%20%20%20%20%20*%20set%20to%20false%20to%20show%20them.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren(hide)%7Bvar%20c%3Dthis.children%3Bfor(var%20i%3D0%3Bi%3Cc.length%3Bi%2B%2B)%7Bvar%20n%3Dc%5Bi%5D%3B%2F%2F%20Ignore%20non-changes%0Aif(Boolean(hide)!%3DBoolean(n.__hideTemplateChildren__))%7Bif(n.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bif(hide)%7Bn.__polymerTextContent__%3Dn.textContent%3Bn.textContent%3D''%3B%7Delse%7Bn.textContent%3Dn.__polymerTextContent__%3B%7D%2F%2F%20remove%20and%20replace%20slot%0A%7Delse%20if(n.localName%3D%3D%3D'slot')%7Bif(hide)%7Bn.__polymerReplaced__%3Ddocument.createComment('hidden-slot')%3Bn.parentNode.replaceChild(n.__polymerReplaced__%2Cn)%3B%7Delse%7Bvar%20replace%3Dn.__polymerReplaced__%3Bif(replace)%7Breplace.parentNode.replaceChild(n%2Creplace)%3B%7D%7D%7Delse%20if(n.style)%7Bif(hide)%7Bn.__polymerDisplay__%3Dn.style.display%3Bn.style.display%3D'none'%3B%7Delse%7Bn.style.display%3Dn.__polymerDisplay__%3B%7D%7D%7Dn.__hideTemplateChildren__%3Dhide%3Bif(n._showHideChildren)%7Bn._showHideChildren(hide)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20property-effects%20implementation%20to%20intercept%0A%20%20%20%20%20%20%20*%20textContent%20bindings%20while%20children%20are%20%22hidden%22%20and%20cache%20in%0A%20%20%20%20%20%20%20*%20private%20storage%20for%20later%20retrieval.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7Bif(node.__hideTemplateChildren__%26%26node.nodeType%3D%3DNode.TEXT_NODE%26%26prop%3D%3D'textContent')%7Bnode.__polymerTextContent__%3Dvalue%3B%7Delse%7B_get(TemplateInstanceBase.prototype.__proto__%7C%7CObject.getPrototypeOf(TemplateInstanceBase.prototype)%2C'_setUnmanagedPropertyToNode'%2Cthis).call(this%2Cnode%2Cprop%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Find%20the%20parent%20model%20of%20this%20template%20instance.%20%20The%20parent%20model%0A%20%20%20%20%20%20%20*%20is%20either%20another%20templatize%20instance%20that%20had%20option%20%60parentModel%3A%20true%60%2C%0A%20%20%20%20%20%20%20*%20or%20else%20the%20host%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Polymer_PropertyEffects%7D%20The%20parent%20model%20of%20this%20instance%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'dispatchEvent'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stub%20of%20HTMLElement's%20%60dispatchEvent%60%2C%20so%20that%20effects%20that%20may%0A%20%20%20%20%20%20%20*%20dispatch%20events%20safely%20no-op.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BEvent%7D%20event%20Event%20to%20dispatch%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Always%20true.%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20dispatchEvent(event)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Areturn%20true%3B%7D%7D%2C%7Bkey%3A'parentModel'%2Cget%3Afunction%20get()%7Bvar%20model%3Dthis.__parentModel%3Bif(!model)%7Bvar%20options%3Dvoid%200%3Bmodel%3Dthis%3Bdo%7B%2F%2F%20A%20template%20instance's%20%60__dataHost%60%20is%20a%20%3Ctemplate%3E%0A%2F%2F%20%60model.__dataHost.__dataHost%60%20is%20the%20template's%20host%0Amodel%3Dmodel.__dataHost.__dataHost%3B%7Dwhile((options%3Dmodel.__templatizeOptions)%26%26!options.parentModel)%3Bthis.__parentModel%3Dmodel%3B%7Dreturn%20model%3B%7D%7D%5D)%3Breturn%20TemplateInstanceBase%3B%7D(base)%3B%2F**%20%40type%20%7B!DataTemplate%7D%20*%2FTemplateInstanceBase.prototype.__dataHost%3B%2F**%20%40type%20%7B!TemplatizeOptions%7D%20*%2FTemplateInstanceBase.prototype.__templatizeOptions%3B%2F**%20%40type%20%7B!Polymer_PropertyEffects%7D%20*%2FTemplateInstanceBase.prototype._methodHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2FTemplateInstanceBase.prototype.__templatizeOwner%3B%2F**%20%40type%20%7B!Object%7D%20*%2FTemplateInstanceBase.prototype.__hostProps%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BTemplateInstanceBase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20MutableTemplateInstanceBase%3DPolymer.MutableData(TemplateInstanceBase)%3Bfunction%20findMethodHost(template)%7B%2F%2F%20Technically%20this%20should%20be%20the%20owner%20of%20the%20outermost%20template.%0A%2F%2F%20In%20shadow%20dom%2C%20this%20is%20always%20getRootNode().host%2C%20but%20we%20can%0A%2F%2F%20approximate%20this%20via%20cooperation%20with%20our%20dataHost%20always%20setting%0A%2F%2F%20%60_methodHost%60%20as%20long%20as%20there%20were%20bindings%20(or%20id's)%20on%20this%0A%2F%2F%20instance%20causing%20it%20to%20get%20a%20dataHost.%0Avar%20templateHost%3Dtemplate.__dataHost%3Breturn%20templateHost%26%26templateHost._methodHost%7C%7CtemplateHost%3B%7D%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%0A%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20class.prototype%20is%20not%20defined%20for%20some%20reason%0A%20%20%20%20%20*%2Ffunction%20createTemplatizerClass(template%2CtemplateInfo%2Coptions)%7B%2F%2F%20Anonymous%20class%20created%20by%20the%20templatize%0Avar%20base%3Doptions.mutableData%3FMutableTemplateInstanceBase%3ATemplateInstanceBase%3B%2F%2F%20Affordance%20for%20global%20mixins%20onto%20TemplatizeInstance%0Aif(Polymer.Templatize.mixin)%7Bbase%3DPolymer.Templatize.mixin(base)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fvar%20klass%3Dfunction(_base2)%7B_inherits(klass%2C_base2)%3Bfunction%20klass()%7B_classCallCheck(this%2Cklass)%3Breturn%20_possibleConstructorReturn(this%2C(klass.__proto__%7C%7CObject.getPrototypeOf(klass)).apply(this%2Carguments))%3B%7Dreturn%20klass%3B%7D(base)%3Bklass.prototype.__templatizeOptions%3Doptions%3Bklass.prototype._bindTemplate(template)%3BaddNotifyEffects(klass%2Ctemplate%2CtemplateInfo%2Coptions)%3Breturn%20klass%3B%7D%2F**%0A%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20class.prototype%20is%20not%20defined%20for%20some%20reason%0A%20%20%20%20%20*%2Ffunction%20addPropagateEffects(template%2CtemplateInfo%2Coptions)%7Bvar%20userForwardHostProp%3Doptions.forwardHostProp%3Bif(userForwardHostProp)%7B%2F%2F%20Provide%20data%20API%20and%20property%20effects%20on%20memoized%20template%20class%0Avar%20klass%3DtemplateInfo.templatizeTemplateClass%3Bif(!klass)%7Bvar%20_base3%3Doptions.mutableData%3FMutableDataTemplate%3ADataTemplate%3B%2F**%20%40private%20*%2Fklass%3DtemplateInfo.templatizeTemplateClass%3Dfunction(_base4)%7B_inherits(TemplatizedTemplate%2C_base4)%3Bfunction%20TemplatizedTemplate()%7B_classCallCheck(this%2CTemplatizedTemplate)%3Breturn%20_possibleConstructorReturn(this%2C(TemplatizedTemplate.__proto__%7C%7CObject.getPrototypeOf(TemplatizedTemplate)).apply(this%2Carguments))%3B%7Dreturn%20TemplatizedTemplate%3B%7D(_base3)%3B%2F%2F%20Add%20template%20-%20%3Einstances%20effects%0A%2F%2F%20and%20host%20%3C-%20template%20effects%0Avar%20hostProps%3DtemplateInfo.hostProps%3Bfor(var%20prop%20in%20hostProps)%7Bklass.prototype._addPropertyEffect('_host_'%2Bprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.PROPAGATE%2C%7Bfn%3AcreateForwardHostPropEffect(prop%2CuserForwardHostProp)%7D)%3Bklass.prototype._createNotifyingProperty('_host_'%2Bprop)%3B%7D%7DupgradeTemplate(template%2Cklass)%3B%2F%2F%20Mix%20any%20pre-bound%20data%20into%20__data%3B%20no%20need%20to%20flush%20this%20to%0A%2F%2F%20instances%20since%20they%20pull%20from%20the%20template%20at%20instance-time%0Aif(template.__dataProto)%7B%2F%2F%20Note%2C%20generally%20%60__dataProto%60%20could%20be%20chained%2C%20but%20it's%20guaranteed%0A%2F%2F%20to%20not%20be%20since%20this%20is%20a%20vanilla%20template%20we%20just%20added%20effects%20to%0AObject.assign(template.__data%2Ctemplate.__dataProto)%3B%7D%2F%2F%20Clear%20any%20pending%20data%20for%20performance%0Atemplate.__dataTemp%3D%7B%7D%3Btemplate.__dataPending%3Dnull%3Btemplate.__dataOld%3Dnull%3Btemplate._enableProperties()%3B%7D%7D%2F*%20eslint-enable%20valid-jsdoc%20*%2Ffunction%20createForwardHostPropEffect(hostProp%2CuserForwardHostProp)%7Breturn%20function%20forwardHostProp(template%2Cprop%2Cprops)%7BuserForwardHostProp.call(template.__templatizeOwner%2Cprop.substring('_host_'.length)%2Cprops%5Bprop%5D)%3B%7D%3B%7Dfunction%20addNotifyEffects(klass%2Ctemplate%2CtemplateInfo%2Coptions)%7Bvar%20hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3Bfor(var%20iprop%20in%20options.instanceProps)%7Bdelete%20hostProps%5Biprop%5D%3Bvar%20userNotifyInstanceProp%3Doptions.notifyInstanceProp%3Bif(userNotifyInstanceProp)%7Bklass.prototype._addPropertyEffect(iprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY%2C%7Bfn%3AcreateNotifyInstancePropEffect(iprop%2CuserNotifyInstanceProp)%7D)%3B%7D%7Dif(options.forwardHostProp%26%26template.__dataHost)%7Bfor(var%20hprop%20in%20hostProps)%7Bklass.prototype._addPropertyEffect(hprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY%2C%7Bfn%3AcreateNotifyHostPropEffect()%7D)%3B%7D%7D%7Dfunction%20createNotifyInstancePropEffect(instProp%2CuserNotifyInstanceProp)%7Breturn%20function%20notifyInstanceProp(inst%2Cprop%2Cprops)%7BuserNotifyInstanceProp.call(inst.__templatizeOwner%2Cinst%2Cprop%2Cprops%5Bprop%5D)%3B%7D%3B%7Dfunction%20createNotifyHostPropEffect()%7Breturn%20function%20notifyHostProp(inst%2Cprop%2Cprops)%7Binst.__dataHost._setPendingPropertyOrPath('_host_'%2Bprop%2Cprops%5Bprop%5D%2Ctrue%2Ctrue)%3B%7D%3B%7D%2F**%0A%20%20%20%20%20*%20Module%20for%20preparing%20and%20stamping%20instances%20of%20templates%20that%20utilize%0A%20%20%20%20%20*%20Polymer's%20data-binding%20and%20declarative%20event%20listener%20features.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Get%20a%20template%20from%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20let%20template%20%3D%20this.querySelector('template')%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Prepare%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20let%20TemplateClass%20%3D%20Polymer.Templatize.templatize(template)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Instance%20the%20template%20with%20an%20initial%20data%20model%0A%20%20%20%20%20*%20%20%20%20%20let%20instance%20%3D%20new%20TemplateClass(%7BmyProp%3A%20'initial'%7D)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Insert%20the%20instance's%20DOM%20somewhere%2C%20e.g.%20element's%20shadow%20DOM%0A%20%20%20%20%20*%20%20%20%20%20this.shadowRoot.appendChild(instance.root)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Changing%20a%20property%20on%20the%20instance%20will%20propagate%20to%20bindings%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20in%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20instance.myProp%20%3D%20'new%20value'%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20%60options%60%20dictionary%20passed%20to%20%60templatize%60%20allows%20for%20customizing%0A%20%20%20%20%20*%20features%20of%20the%20generated%20template%20class%2C%20including%20how%20outer-scope%20host%0A%20%20%20%20%20*%20properties%20should%20be%20forwarded%20into%20template%20instances%2C%20how%20any%20instance%0A%20%20%20%20%20*%20properties%20added%20into%20the%20template's%20scope%20should%20be%20notified%20out%20to%0A%20%20%20%20%20*%20the%20host%2C%20and%20whether%20the%20instance%20should%20be%20decorated%20as%20a%20%22parent%20model%22%0A%20%20%20%20%20*%20of%20any%20event%20handlers.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Customize%20property%20forwarding%20and%20event%20model%20decoration%0A%20%20%20%20%20*%20%20%20%20%20let%20TemplateClass%20%3D%20Polymer.Templatize.templatize(template%2C%20this%2C%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20parentModel%3A%20true%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20forwardHostProp(property%2C%20value)%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20instanceProps%3A%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20notifyInstanceProp(instance%2C%20property%2C%20value)%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Module%20for%20preparing%20and%20stamping%20instances%20of%20templates%0A%20%20%20%20%20*%20%20%20utilizing%20Polymer%20templating%20features.%0A%20%20%20%20%20*%2FPolymer.Templatize%3D%7B%2F**%0A%20%20%20%20%20%20%20*%20Returns%20an%20anonymous%20%60Polymer.PropertyEffects%60%20class%20bound%20to%20the%0A%20%20%20%20%20%20%20*%20%60%3Ctemplate%3E%60%20provided.%20%20Instancing%20the%20class%20will%20result%20in%20the%0A%20%20%20%20%20%20%20*%20template%20being%20stamped%20into%20a%20document%20fragment%20stored%20as%20the%20instance's%0A%20%20%20%20%20%20%20*%20%60root%60%20property%2C%20after%20which%20it%20can%20be%20appended%20to%20the%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Templates%20may%20utilize%20all%20Polymer%20data-binding%20features%20as%20well%20as%0A%20%20%20%20%20%20%20*%20declarative%20event%20listeners.%20%20Event%20listeners%20and%20inline%20computing%0A%20%20%20%20%20%20%20*%20functions%20in%20the%20template%20will%20be%20called%20on%20the%20host%20of%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20constructor%20returned%20takes%20a%20single%20argument%20dictionary%20of%20initial%0A%20%20%20%20%20%20%20*%20property%20values%20to%20propagate%20into%20template%20bindings.%20%20Additionally%0A%20%20%20%20%20%20%20*%20host%20properties%20can%20be%20forwarded%20in%2C%20and%20instance%20properties%20can%20be%0A%20%20%20%20%20%20%20*%20notified%20out%20by%20providing%20optional%20callbacks%20in%20the%20%60options%60%20dictionary.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Valid%20configuration%20in%20%60options%60%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60forwardHostProp(property%2C%20value)%60%3A%20Called%20when%20a%20property%20referenced%0A%20%20%20%20%20%20%20*%20%20%20in%20the%20template%20changed%20on%20the%20template's%20host.%20As%20this%20library%20does%0A%20%20%20%20%20%20%20*%20%20%20not%20retain%20references%20to%20templates%20instanced%20by%20the%20user%2C%20it%20is%20the%0A%20%20%20%20%20%20%20*%20%20%20templatize%20owner's%20responsibility%20to%20forward%20host%20property%20changes%20into%0A%20%20%20%20%20%20%20*%20%20%20user-stamped%20instances.%20%20The%20%60instance.forwardHostProp(property%2C%20value)%60%0A%20%20%20%20%20%20%20*%20%20%20%20method%20on%20the%20generated%20class%20should%20be%20called%20to%20forward%20host%0A%20%20%20%20%20%20%20*%20%20%20properties%20into%20the%20template%20to%20prevent%20unnecessary%20property-changed%0A%20%20%20%20%20%20%20*%20%20%20notifications.%20Any%20properties%20referenced%20in%20the%20template%20that%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20defined%20in%20%60instanceProps%60%20will%20be%20notified%20up%20to%20the%20template's%20host%0A%20%20%20%20%20%20%20*%20%20%20automatically.%0A%20%20%20%20%20%20%20*%20-%20%60instanceProps%60%3A%20Dictionary%20of%20property%20names%20that%20will%20be%20added%0A%20%20%20%20%20%20%20*%20%20%20to%20the%20instance%20by%20the%20templatize%20owner.%20%20These%20properties%20shadow%20any%0A%20%20%20%20%20%20%20*%20%20%20host%20properties%2C%20and%20changes%20within%20the%20template%20to%20these%20properties%0A%20%20%20%20%20%20%20*%20%20%20will%20result%20in%20%60notifyInstanceProp%60%20being%20called.%0A%20%20%20%20%20%20%20*%20-%20%60mutableData%60%3A%20When%20%60true%60%2C%20the%20generated%20class%20will%20skip%20strict%0A%20%20%20%20%20%20%20*%20%20%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20%20%20%20%20*%20%20%20%22dirty%22).%0A%20%20%20%20%20%20%20*%20-%20%60notifyInstanceProp(instance%2C%20property%2C%20value)%60%3A%20Called%20when%0A%20%20%20%20%20%20%20*%20%20%20an%20instance%20property%20changes.%20%20Users%20may%20choose%20to%20call%20%60notifyPath%60%0A%20%20%20%20%20%20%20*%20%20%20on%20e.g.%20the%20owner%20to%20notify%20the%20change.%0A%20%20%20%20%20%20%20*%20-%20%60parentModel%60%3A%20When%20%60true%60%2C%20events%20handled%20by%20declarative%20event%20listeners%0A%20%20%20%20%20%20%20*%20%20%20(%60on-event%3D%22handler%22%60)%20will%20be%20decorated%20with%20a%20%60model%60%20property%20pointing%0A%20%20%20%20%20%20%20*%20%20%20to%20the%20template%20instance%20that%20stamped%20it.%20%20It%20will%20also%20be%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60instance.parentModel%60%20in%20cases%20where%20template%20instance%20nesting%0A%20%20%20%20%20%20%20*%20%20%20causes%20an%20inner%20model%20to%20shadow%20an%20outer%20model.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20All%20callbacks%20are%20called%20bound%20to%20the%20%60owner%60.%20Any%20context%0A%20%20%20%20%20%20%20*%20needed%20for%20the%20callbacks%20(such%20as%20references%20to%20%60instances%60%20stamped)%0A%20%20%20%20%20%20%20*%20should%20be%20stored%20on%20the%20%60owner%60%20such%20that%20they%20can%20be%20retrieved%20via%0A%20%20%20%20%20%20%20*%20%60this%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20%60options.forwardHostProp%60%20is%20declared%20as%20an%20option%2C%20any%20properties%0A%20%20%20%20%20%20%20*%20referenced%20in%20the%20template%20will%20be%20automatically%20forwarded%20from%20the%20host%20of%0A%20%20%20%20%20%20%20*%20the%20%60%3Ctemplate%3E%60%20to%20instances%2C%20with%20the%20exception%20of%20any%20properties%20listed%20in%0A%20%20%20%20%20%20%20*%20the%20%60options.instanceProps%60%20object.%20%20%60instanceProps%60%20are%20assumed%20to%20be%0A%20%20%20%20%20%20%20*%20managed%20by%20the%20owner%20of%20the%20instances%2C%20either%20passed%20into%20the%20constructor%0A%20%20%20%20%20%20%20*%20or%20set%20after%20the%20fact.%20%20Note%2C%20any%20properties%20passed%20into%20the%20constructor%20will%0A%20%20%20%20%20%20%20*%20always%20be%20set%20to%20the%20instance%20(regardless%20of%20whether%20they%20would%20normally%0A%20%20%20%20%20%20%20*%20be%20forwarded%20from%20the%20host).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20%60templatize()%60%20can%20be%20run%20only%20once%20for%20a%20given%20%60%3Ctemplate%3E%60.%0A%20%20%20%20%20%20%20*%20Further%20calls%20will%20result%20in%20an%20error.%20Also%2C%20there%20is%20a%20special%0A%20%20%20%20%20%20%20*%20behavior%20if%20the%20template%20was%20duplicated%20through%20a%20mechanism%20such%20as%0A%20%20%20%20%20%20%20*%20%60%3Cdom-repeat%3E%60%20or%20%60%3Ctest-fixture%3E%60.%20In%20this%20case%2C%20all%20calls%20to%0A%20%20%20%20%20%20%20*%20%60templatize()%60%20return%20the%20same%20class%20for%20all%20duplicates%20of%20a%20template.%0A%20%20%20%20%20%20%20*%20The%20class%20returned%20from%20%60templatize()%60%20is%20generated%20only%20once%20using%0A%20%20%20%20%20%20%20*%20the%20%60options%60%20from%20the%20first%20call.%20This%20means%20that%20any%20%60options%60%0A%20%20%20%20%20%20%20*%20provided%20to%20subsequent%20calls%20will%20be%20ignored.%20Therefore%2C%20it%20is%20very%0A%20%20%20%20%20%20%20*%20important%20not%20to%20close%20over%20any%20variables%20inside%20the%20callbacks.%20Also%2C%0A%20%20%20%20%20%20%20*%20arrow%20functions%20must%20be%20avoided%20because%20they%20bind%20the%20outer%20%60this%60.%0A%20%20%20%20%20%20%20*%20Inside%20the%20callbacks%2C%20any%20contextual%20information%20can%20be%20accessed%0A%20%20%20%20%20%20%20*%20through%20%60this%60%2C%20which%20points%20to%20the%20%60owner%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7BPolymer_PropertyEffects%3D%7D%20owner%20Owner%20of%20the%20template%20instances%3B%0A%20%20%20%20%20%20%20*%20%20%20any%20optional%20callbacks%20will%20be%20bound%20to%20this%20owner.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20options%20Options%20dictionary%20(see%20summary%20for%20details)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bfunction(new%3ATemplateInstanceBase)%7D%20Generated%20class%20bound%20to%20the%20template%0A%20%20%20%20%20%20%20*%20%20%20provided%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2Ftemplatize%3Afunction%20templatize(template%2Cowner%2Coptions)%7B%2F%2F%20Under%20strictTemplatePolicy%2C%20the%20templatized%20element%20must%20be%20owned%0A%2F%2F%20by%20a%20(trusted)%20Polymer%20element%2C%20indicated%20by%20existence%20of%20_methodHost%3B%0A%2F%2F%20e.g.%20for%20dom-if%20%26%20dom-repeat%20in%20main%20document%2C%20_methodHost%20is%20null%0Aif(Polymer.strictTemplatePolicy%26%26!findMethodHost(template))%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20template%20owner%20not%20trusted')%3B%7Doptions%3D%2F**%20%40type%20%7B!TemplatizeOptions%7D%20*%2Foptions%7C%7C%7B%7D%3Bif(template.__templatizeOwner)%7Bthrow%20new%20Error('A%20%3Ctemplate%3E%20can%20only%20be%20templatized%20once')%3B%7Dtemplate.__templatizeOwner%3Downer%3Bvar%20ctor%3Downer%3Fowner.constructor%3ATemplateInstanceBase%3Bvar%20templateInfo%3Dctor._parseTemplate(template)%3B%2F%2F%20Get%20memoized%20base%20class%20for%20the%20prototypical%20template%2C%20which%0A%2F%2F%20includes%20property%20effects%20for%20binding%20template%20%26%20forwarding%0Avar%20baseClass%3DtemplateInfo.templatizeInstanceClass%3Bif(!baseClass)%7BbaseClass%3DcreateTemplatizerClass(template%2CtemplateInfo%2Coptions)%3BtemplateInfo.templatizeInstanceClass%3DbaseClass%3B%7D%2F%2F%20Host%20property%20forwarding%20must%20be%20installed%20onto%20template%20instance%0AaddPropagateEffects(template%2CtemplateInfo%2Coptions)%3B%2F%2F%20Subclass%20base%20class%20and%20add%20reference%20for%20this%20specific%20template%0A%2F**%20%40private%20*%2Fvar%20klass%3Dfunction(_baseClass)%7B_inherits(TemplateInstance%2C_baseClass)%3Bfunction%20TemplateInstance()%7B_classCallCheck(this%2CTemplateInstance)%3Breturn%20_possibleConstructorReturn(this%2C(TemplateInstance.__proto__%7C%7CObject.getPrototypeOf(TemplateInstance)).apply(this%2Carguments))%3B%7Dreturn%20TemplateInstance%3B%7D(baseClass)%3Bklass.prototype._methodHost%3DfindMethodHost(template)%3Bklass.prototype.__dataHost%3Dtemplate%3Bklass.prototype.__templatizeOwner%3Downer%3Bklass.prototype.__hostProps%3DtemplateInfo.hostProps%3Bklass%3D%2F**%20%40type%20%7Bfunction(new%3ATemplateInstanceBase)%7D%20*%2Fklass%3B%2F%2Feslint-disable-line%20no-self-assign%0Areturn%20klass%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20associated%20with%20a%20given%20element%2C%20which%0A%20%20%20%20%20%20%20*%20serves%20as%20the%20binding%20scope%20for%20the%20template%20instance%20the%20element%20is%0A%20%20%20%20%20%20%20*%20contained%20in.%20A%20template%20model%20is%20an%20instance%20of%0A%20%20%20%20%20%20%20*%20%60TemplateInstanceBase%60%2C%20and%20should%20be%20used%20to%20manipulate%20data%0A%20%20%20%20%20%20%20*%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20let%20model%20%3D%20modelForElement(el)%3B%0A%20%20%20%20%20%20%20*%20%20%20if%20(model.index%20%3C%2010)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20model.set('item.checked'%2C%20true)%3B%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20The%20model%20will%20be%20returned%20for%0A%20%20%20%20%20%20%20*%20%20%20elements%20stamped%20from%20this%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%3D%7D%20node%20Node%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Template%20instance%20representing%20the%0A%20%20%20%20%20%20%20*%20%20%20binding%20scope%20for%20the%20element%0A%20%20%20%20%20%20%20*%2FmodelForElement%3Afunction%20modelForElement(template%2Cnode)%7Bvar%20model%3Dvoid%200%3Bwhile(node)%7B%2F%2F%20An%20element%20with%20a%20__templatizeInstance%20marks%20the%20top%20boundary%0A%2F%2F%20of%20a%20scope%3B%20walk%20up%20until%20we%20find%20one%2C%20and%20then%20ensure%20that%0A%2F%2F%20its%20__dataHost%20matches%20%60this%60%2C%20meaning%20this%20dom-repeat%20stamped%20it%0Aif(model%3Dnode.__templatizeInstance)%7B%2F%2F%20Found%20an%20element%20stamped%20by%20another%20template%3B%20keep%20walking%20up%0A%2F%2F%20from%20its%20__dataHost%0Aif(model.__dataHost!%3Dtemplate)%7Bnode%3Dmodel.__dataHost%3B%7Delse%7Breturn%20model%3B%7D%7Delse%7B%2F%2F%20Still%20in%20a%20template%20scope%2C%20keep%20going%20up%20until%0A%2F%2F%20a%20__templatizeInstance%20is%20found%0Anode%3Dnode.parentNode%3B%7D%7Dreturn%20null%3B%7D%7D%3BPolymer.TemplateInstanceBase%3DTemplateInstanceBase%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Ftemplatize.html.js%0A",
            "resourceBytes": 24612,
            "encodedBytes": 0,
            "unusedBytes": 10875
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPolymer.TemplateInstanceBase%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20%20%20*%20%20%20_templatizerTemplate%3A%20HTMLTemplateElement%2C%0A%20%20%20%20%20*%20%20%20_parentModel%3A%20boolean%2C%0A%20%20%20%20%20*%20%20%20_instanceProps%3A%20Object%2C%0A%20%20%20%20%20*%20%20%20_forwardHostPropV2%3A%20Function%2C%0A%20%20%20%20%20*%20%20%20_notifyInstancePropV2%3A%20Function%2C%0A%20%20%20%20%20*%20%20%20ctor%3A%20TemplateInstanceBase%0A%20%20%20%20%20*%20%7D%7D%0A%20%20%20%20%20*%2Fvar%20TemplatizerUser%3Dvoid%200%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20%20%20*%20The%20%60Polymer.Templatizer%60%20behavior%20adds%20methods%20to%20generate%20instances%20of%0A%20%20%20%20%20*%20templates%20that%20are%20each%20managed%20by%20an%20anonymous%20%60Polymer.PropertyEffects%60%0A%20%20%20%20%20*%20instance%20where%20data-bindings%20in%20the%20stamped%20template%20content%20are%20bound%20to%0A%20%20%20%20%20*%20accessors%20on%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20behavior%20is%20provided%20in%20Polymer%202.x%20as%20a%20hybrid-element%20convenience%0A%20%20%20%20%20*%20only.%20%20For%20non-hybrid%20usage%2C%20the%20%60Polymer.Templatize%60%20library%0A%20%20%20%20%20*%20should%20be%20used%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Get%20a%20template%20from%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20let%20template%20%3D%20this.querySelector('template')%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Prepare%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20this.templatize(template)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Instance%20the%20template%20with%20an%20initial%20data%20model%0A%20%20%20%20%20*%20%20%20%20%20let%20instance%20%3D%20this.stamp(%7BmyProp%3A%20'initial'%7D)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Insert%20the%20instance's%20DOM%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20Polymer.dom(this).appendChild(instance.root)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Changing%20a%20property%20on%20the%20instance%20will%20propagate%20to%20bindings%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20in%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20instance.myProp%20%3D%20'new%20value'%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Users%20of%20%60Templatizer%60%20may%20need%20to%20implement%20the%20following%20abstract%0A%20%20%20%20%20*%20API's%20to%20determine%20how%20properties%20and%20paths%20from%20the%20host%20should%20be%0A%20%20%20%20%20*%20forwarded%20into%20to%20instances%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_forwardHostPropV2%3A%20function(prop%2C%20value)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Likewise%2C%20users%20may%20implement%20these%20additional%20abstract%20API's%20to%20determine%0A%20%20%20%20%20*%20how%20instance-specific%20properties%20that%20change%20on%20the%20instance%20should%20be%0A%20%20%20%20%20*%20forwarded%20out%20to%20the%20host%2C%20if%20necessary.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_notifyInstancePropV2%3A%20function(inst%2C%20prop%2C%20value)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20In%20order%20to%20determine%20which%20properties%20are%20instance-specific%20and%20require%0A%20%20%20%20%20*%20custom%20notification%20via%20%60_notifyInstanceProp%60%2C%20define%20an%20%60_instanceProps%60%0A%20%20%20%20%20*%20object%20containing%20keys%20for%20each%20instance%20prop%2C%20for%20example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_instanceProps%3A%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20item%3A%20true%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20index%3A%20true%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20properties%20used%20in%20the%20template%20that%20are%20not%20defined%20in%20_instanceProp%0A%20%20%20%20%20*%20will%20be%20forwarded%20out%20to%20the%20Templatize%20%60owner%60%20automatically.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Users%20may%20also%20implement%20the%20following%20abstract%20function%20to%20show%20or%0A%20%20%20%20%20*%20hide%20any%20DOM%20generated%20using%20%60stamp%60%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_showHideChildren%3A%20function(shouldHide)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20some%20callbacks%20are%20suffixed%20with%20%60V2%60%20in%20the%20Polymer%202.x%20behavior%0A%20%20%20%20%20*%20as%20the%20implementations%20will%20need%20to%20differ%20from%20the%20callbacks%20required%0A%20%20%20%20%20*%20by%20the%201.x%20Templatizer%20API%20due%20to%20changes%20in%20the%20%60TemplateInstance%60%20API%0A%20%20%20%20%20*%20between%20versions%201.x%20and%202.x.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40polymerBehavior%0A%20%20%20%20%20*%2FPolymer.Templatizer%3D%7B%2F**%0A%20%20%20%20%20%20%20*%20Generates%20an%20anonymous%20%60TemplateInstance%60%20class%20(stored%20as%20%60this.ctor%60)%0A%20%20%20%20%20%20%20*%20for%20the%20provided%20template.%20%20This%20method%20should%20be%20called%20once%20per%0A%20%20%20%20%20%20%20*%20template%20to%20prepare%20an%20element%20for%20stamping%20the%20template%2C%20followed%0A%20%20%20%20%20%20%20*%20by%20%60stamp%60%20to%20create%20new%20instances%20of%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20prepare%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20mutableData%20When%20%60true%60%2C%20the%20generated%20class%20will%20skip%0A%20%20%20%20%20%20%20*%20%20%20strict%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%0A%20%20%20%20%20%20%20*%20%20%20be%20%22dirty%22).%20Defaults%20to%20false.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2Ftemplatize%3Afunction%20templatize(template%2CmutableData)%7Bthis._templatizerTemplate%3Dtemplate%3Bthis.ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7BmutableData%3ABoolean(mutableData)%2CparentModel%3Athis._parentModel%2CinstanceProps%3Athis._instanceProps%2CforwardHostProp%3Athis._forwardHostPropV2%2CnotifyInstanceProp%3Athis._notifyInstancePropV2%7D)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Creates%20an%20instance%20of%20the%20template%20prepared%20by%20%60templatize%60.%20%20The%20object%0A%20%20%20%20%20%20%20*%20returned%20is%20an%20instance%20of%20the%20anonymous%20class%20generated%20by%20%60templatize%60%0A%20%20%20%20%20%20%20*%20whose%20%60root%60%20property%20is%20a%20document%20fragment%20containing%20newly%20cloned%0A%20%20%20%20%20%20%20*%20template%20content%2C%20and%20which%20has%20property%20accessors%20corresponding%20to%0A%20%20%20%20%20%20%20*%20properties%20referenced%20in%20template%20bindings.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20model%20Object%20containing%20initial%20property%20values%20to%0A%20%20%20%20%20%20%20*%20%20%20populate%20into%20the%20template%20bindings.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Returns%20the%20created%20instance%20of%0A%20%20%20%20%20%20%20*%20the%20template%20prepared%20by%20%60templatize%60.%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2Fstamp%3Afunction%20stamp(model)%7Breturn%20new%20this.ctor(model)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20(%60TemplateInstance%60)%20associated%20with%0A%20%20%20%20%20%20%20*%20a%20given%20element%2C%20which%20serves%20as%20the%20binding%20scope%20for%20the%20template%0A%20%20%20%20%20%20%20*%20instance%20the%20element%20is%20contained%20in.%20%20A%20template%20model%20should%20be%20used%0A%20%20%20%20%20%20%20*%20to%20manipulate%20data%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Model%20representing%20the%20binding%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20the%20element.%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2FmodelForElement%3Afunction%20modelForElement(el)%7Breturn%20Polymer.Templatize.modelForElement(this._templatizerTemplate%2Cel)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Ftemplatizer-behavior.html.js%0A",
            "resourceBytes": 5584,
            "encodedBytes": 0,
            "unusedBytes": 471
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BHTMLElement%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_GestureEventListeners%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20domBindBase%3DPolymer.GestureEventListeners(Polymer.OptionalMutableData(Polymer.PropertyEffects(HTMLElement)))%3B%2F**%0A%20%20%20%20%20*%20Custom%20element%20to%20allow%20using%20Polymer's%20template%20features%20(data%20binding%2C%0A%20%20%20%20%20*%20declarative%20event%20listeners%2C%20etc.)%20in%20the%20main%20document%20without%20defining%0A%20%20%20%20%20*%20a%20new%20custom%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%3Ctemplate%3E%60%20tags%20utilizing%20bindings%20may%20be%20wrapped%20with%20the%20%60%3Cdom-bind%3E%60%0A%20%20%20%20%20*%20element%2C%20which%20will%20immediately%20stamp%20the%20wrapped%20template%20into%20the%20main%0A%20%20%20%20%20*%20document%20and%20bind%20elements%20to%20the%20%60dom-bind%60%20element%20itself%20as%20the%0A%20%20%20%20%20*%20binding%20scope.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40customElement%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.OptionalMutableData%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.GestureEventListeners%0A%20%20%20%20%20*%20%40extends%20%7BdomBindBase%7D%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Custom%20element%20to%20allow%20using%20Polymer's%20template%20features%20(data%0A%20%20%20%20%20*%20%20%20binding%2C%20declarative%20event%20listeners%2C%20etc.)%20in%20the%20main%20document.%0A%20%20%20%20%20*%2Fvar%20DomBind%3Dfunction(_domBindBase)%7B_inherits(DomBind%2C_domBindBase)%3B_createClass(DomBind%2Cnull%2C%5B%7Bkey%3A'observedAttributes'%2Cget%3Afunction%20get()%7Breturn%5B'mutable-data'%5D%3B%7D%7D%5D)%3Bfunction%20DomBind()%7B_classCallCheck(this%2CDomBind)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomBind.__proto__%7C%7CObject.getPrototypeOf(DomBind)).call(this))%3Bif(Polymer.strictTemplatePolicy)%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20dom-bind%20not%20allowed')%3B%7D_this.root%3Dnull%3B_this.%24%3Dnull%3B_this.__children%3Dnull%3Breturn%20_this%3B%7D%2F**%20%40return%20%7Bvoid%7D%20*%2F_createClass(DomBind%2C%5B%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback()%7B%2F%2F%20assumes%20only%20one%20observed%20attribute%0Athis.mutableData%3Dtrue%3B%7D%2F**%20%40return%20%7Bvoid%7D%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bthis.style.display%3D'none'%3Bthis.render()%3B%7D%2F**%20%40return%20%7Bvoid%7D%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bthis.__removeChildren()%3B%7D%7D%2C%7Bkey%3A'__insertChildren'%2Cvalue%3Afunction%20__insertChildren()%7Bthis.parentNode.insertBefore(this.root%2Cthis)%3B%7D%7D%2C%7Bkey%3A'__removeChildren'%2Cvalue%3Afunction%20__removeChildren()%7Bif(this.__children)%7Bfor(var%20i%3D0%3Bi%3Cthis.__children.length%3Bi%2B%2B)%7Bthis.root.appendChild(this.__children%5Bi%5D)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20This%20is%20typically%20only%0A%20%20%20%20%20%20%20*%20necessary%20to%20call%20if%20HTMLImports%20with%20the%20async%20attribute%20are%20used.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7Bvar%20_this2%3Dthis%3Bvar%20template%3Dvoid%200%3Bif(!this.__children)%7Btemplate%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Ftemplate%7C%7Cthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Btemplate%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2F_this2.querySelector('template')%3Bif(template)%7Bobserver.disconnect()%3B_this2.render()%3B%7Delse%7Bthrow%20new%20Error('dom-bind%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%3B%7Dthis.root%3Dthis._stampTemplate(template)%3Bthis.%24%3Dthis.root.%24%3Bthis.__children%3D%5B%5D%3Bfor(var%20n%3Dthis.root.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bthis.__children%5Bthis.__children.length%5D%3Dn%3B%7Dthis._enableProperties()%3B%7Dthis.__insertChildren()%3Bthis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3B%7D%7D%5D)%3Breturn%20DomBind%3B%7D(domBindBase)%3BcustomElements.define('dom-bind'%2CDomBind)%3B%2F**%20%40const%20*%2FPolymer.DomBind%3DDomBind%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-bind.html.js%0A",
            "resourceBytes": 5022,
            "encodedBytes": 0,
            "unusedBytes": 1943
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20Class%20representing%20a%20static%20string%20value%20which%20can%20be%20used%20to%20filter%0A%20%20%20%20%20*%20strings%20by%20asseting%20that%20they%20have%20been%20created%20via%20this%20class.%20The%0A%20%20%20%20%20*%20%60value%60%20property%20returns%20the%20string%20passed%20to%20the%20constructor.%0A%20%20%20%20%20*%2Fvar%20LiteralString%3Dfunction()%7Bfunction%20LiteralString(string)%7B_classCallCheck(this%2CLiteralString)%3B%2F**%20%40type%20%7Bstring%7D%20*%2Fthis.value%3Dstring.toString()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20LiteralString%20string%20value%0A%20%20%20%20%20%20%20*%2F_createClass(LiteralString%2C%5B%7Bkey%3A'toString'%2Cvalue%3Afunction%20toString()%7Breturn%20this.value%3B%7D%7D%5D)%3Breturn%20LiteralString%3B%7D()%3B%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Object%20to%20stringify%20into%20HTML%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20HTML%20stringified%20form%20of%20%60obj%60%0A%20%20%20%20%20*%2Ffunction%20literalValue(value)%7Bif(value%20instanceof%20LiteralString)%7Breturn(%2F**%20%40type%20%7B!LiteralString%7D%20*%2Fvalue.value)%3B%7Delse%7Bthrow%20new%20Error('non-literal%20value%20passed%20to%20Polymer.htmlLiteral%3A%20'%2Bvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Object%20to%20stringify%20into%20HTML%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20HTML%20stringified%20form%20of%20%60obj%60%0A%20%20%20%20%20*%2Ffunction%20htmlValue(value)%7Bif(value%20instanceof%20HTMLTemplateElement)%7Breturn(%2F**%20%40type%20%7B!HTMLTemplateElement%20%7D%20*%2Fvalue.innerHTML)%3B%7Delse%20if(value%20instanceof%20LiteralString)%7Breturn%20literalValue(value)%3B%7Delse%7Bthrow%20new%20Error('non-template%20value%20passed%20to%20Polymer.html%3A%20'%2Bvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20A%20template%20literal%20tag%20that%20creates%20an%20HTML%20%3Ctemplate%3E%20element%20from%20the%0A%20%20%20%20%20*%20contents%20of%20the%20string.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20allows%20you%20to%20write%20a%20Polymer%20Template%20in%20JavaScript.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Templates%20can%20be%20composed%20by%20interpolating%20%60HTMLTemplateElement%60s%20in%0A%20%20%20%20%20*%20expressions%20in%20the%20JavaScript%20template%20literal.%20The%20nested%20template's%0A%20%20%20%20%20*%20%60innerHTML%60%20is%20included%20in%20the%20containing%20template.%20%20The%20only%20other%0A%20%20%20%20%20*%20values%20allowed%20in%20expressions%20are%20those%20returned%20from%20%60Polymer.htmlLiteral%60%0A%20%20%20%20%20*%20which%20ensures%20only%20literal%20values%20from%20JS%20source%20ever%20reach%20the%20HTML%2C%20to%0A%20%20%20%20%20*%20guard%20against%20XSS%20risks.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20All%20other%20values%20are%20disallowed%20in%20expressions%20to%20help%20prevent%20XSS%0A%20%20%20%20%20*%20attacks%3B%20however%2C%20%60Polymer.htmlLiteral%60%20can%20be%20used%20to%20compose%20static%0A%20%20%20%20%20*%20string%20values%20into%20templates.%20This%20is%20useful%20to%20compose%20strings%20into%0A%20%20%20%20%20*%20places%20that%20do%20not%20accept%20html%2C%20like%20the%20css%20text%20of%20a%20%60style%60%0A%20%20%20%20%20*%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20return%20Polymer.html%60%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cstyle%3E%3Ahost%7B%20content%3A%22...%22%20%7D%3C%2Fstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22shadowed%22%3E%24%7Bthis.partialTemplate%7D%3C%2Fdiv%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%24%7Bsuper.template%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20partialTemplate()%20%7B%20return%20Polymer.html%60%3Cspan%3EPartial!%3C%2Fspan%3E%60%3B%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!ITemplateArray%7D%20strings%20Constant%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40param%20%7B...*%7D%20values%20Variable%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40return%20%7B!HTMLTemplateElement%7D%20Constructed%20HTMLTemplateElement%0A%20%20%20%20%20*%2FPolymer.html%3Dfunction%20html(strings)%7Bvar%20template%3D%2F**%20%40type%20%7B!HTMLTemplateElement%7D%20*%2Fdocument.createElement('template')%3Bfor(var%20_len%3Darguments.length%2Cvalues%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bvalues%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dtemplate.innerHTML%3Dvalues.reduce(function(acc%2Cv%2Cidx)%7Breturn%20acc%2BhtmlValue(v)%2Bstrings%5Bidx%2B1%5D%3B%7D%2Cstrings%5B0%5D)%3Breturn%20template%3B%7D%3B%2F**%0A%20%20%20%20%20*%20An%20html%20literal%20tag%20that%20can%20be%20used%20with%20%60Polymer.html%60%20to%20compose.%0A%20%20%20%20%20*%20a%20literal%20string.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20return%20Polymer.html%60%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Ahost%20%7B%20display%3A%20block%3B%20%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%24%7BstyleTemplate%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3C%2Fstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22shadowed%22%3E%24%7BstaticValue%7D%3C%2Fdiv%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%24%7Bsuper.template%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20styleTemplate()%20%7B%20return%20Polymer.htmlLiteral%60.shadowed%20%7B%20background%3A%20gray%3B%20%7D%60%3B%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!ITemplateArray%7D%20strings%20Constant%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40param%20%7B...*%7D%20values%20Variable%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40return%20%7B!LiteralString%7D%20Constructed%20literal%20string%0A%20%20%20%20%20*%2FPolymer.htmlLiteral%3Dfunction(strings)%7Bfor(var%20_len2%3Darguments.length%2Cvalues%3DArray(_len2%3E1%3F_len2-1%3A0)%2C_key2%3D1%3B_key2%3C_len2%3B_key2%2B%2B)%7Bvalues%5B_key2-1%5D%3Darguments%5B_key2%5D%3B%7Dreturn%20new%20LiteralString(values.reduce(function(acc%2Cv%2Cidx)%7Breturn%20acc%2BliteralValue(v)%2Bstrings%5Bidx%2B1%5D%3B%7D%2Cstrings%5B0%5D))%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fhtml-tag.html.js%0A",
            "resourceBytes": 5107,
            "encodedBytes": 0,
            "unusedBytes": 1377
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Base%20class%20that%20provides%20the%20core%20API%20for%20Polymer's%20meta-programming%0A%20%20%20*%20features%20including%20template%20stamping%2C%20data-binding%2C%20attribute%20deserialization%2C%0A%20%20%20*%20and%20property%20change%20observation.%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20*%20%40extends%20%7BHTMLElement%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40summary%20Custom%20element%20base%20class%20that%20provides%20the%20core%20API%20for%20Polymer's%0A%20%20%20*%20%20%20key%20meta-programming%20features%20including%20template%20stamping%2C%20data-binding%2C%0A%20%20%20*%20%20%20attribute%20deserialization%2C%20and%20property%20change%20observation%0A%20%20%20*%2FPolymer.Element%3DPolymer.ElementMixin(HTMLElement)%3B%2F%2F%20NOTE%3A%20this%20is%20here%20for%20modulizer%20to%20export%20%60html%60%20for%20the%20module%20version%20of%20this%20file%0APolymer.html%3DPolymer.html%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Fpolymer-element.html.js%0A",
            "resourceBytes": 939,
            "encodedBytes": 0,
            "unusedBytes": 0
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPolymer.TemplateInstanceBase%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20*%20%40extends%20%7BPolymer.Element%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20domRepeatBase%3DPolymer.OptionalMutableData(Polymer.Element)%3B%2F**%0A%20%20%20*%20The%20%60%3Cdom-repeat%3E%60%20element%20will%20automatically%20stamp%20and%20binds%20one%20instance%0A%20%20%20*%20of%20template%20content%20to%20each%20object%20in%20a%20user-provided%20array.%0A%20%20%20*%20%60dom-repeat%60%20accepts%20an%20%60items%60%20property%2C%20and%20one%20instance%20of%20the%20template%0A%20%20%20*%20is%20stamped%20for%20each%20item%20into%20the%20DOM%20at%20the%20location%20of%20the%20%60dom-repeat%60%0A%20%20%20*%20element.%20%20The%20%60item%60%20property%20will%20be%20set%20on%20each%20instance's%20binding%0A%20%20%20*%20scope%2C%20thus%20templates%20should%20bind%20to%20sub-properties%20of%20%60item%60.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-module%20id%3D%22employee-list%22%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3Ctemplate%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Employee%20list%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20items%3D%22%7B%7Bemployees%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%0A%20%20%20*%20%3C%2Fdom-module%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20With%20the%20following%20custom%20element%20definition%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20class%20EmployeeList%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20%20static%20get%20is()%20%7B%20return%20'employee-list'%3B%20%7D%0A%20%20%20*%20%20%20static%20get%20properties()%20%7B%0A%20%20%20*%20%20%20%20%20return%20%7B%0A%20%20%20*%20%20%20%20%20%20%20employees%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20value()%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Bob'%2C%20last%3A%20'Smith'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Sally'%2C%20last%3A%20'Johnson'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20...%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%7D%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20Notifications%20for%20changes%20to%20items%20sub-properties%20will%20be%20forwarded%20to%20template%0A%20%20%20*%20instances%2C%20which%20will%20update%20via%20the%20normal%20structured%20data%20notification%20system.%0A%20%20%20*%0A%20%20%20*%20Mutations%20to%20the%20%60items%60%20array%20itself%20should%20be%20made%20using%20the%20Array%0A%20%20%20*%20mutation%20API's%20on%20%60Polymer.Base%60%20(%60push%60%2C%20%60pop%60%2C%20%60splice%60%2C%20%60shift%60%2C%0A%20%20%20*%20%60unshift%60)%2C%20and%20template%20instances%20will%20be%20kept%20in%20sync%20with%20the%20data%20in%20the%0A%20%20%20*%20array.%0A%20%20%20*%0A%20%20%20*%20Events%20caught%20by%20event%20handlers%20within%20the%20%60dom-repeat%60%20template%20will%20be%0A%20%20%20*%20decorated%20with%20a%20%60model%60%20property%2C%20which%20represents%20the%20binding%20scope%20for%0A%20%20%20*%20each%20template%20instance.%20%20The%20model%20is%20an%20instance%20of%20Polymer.Base%2C%20and%20should%0A%20%20%20*%20be%20used%20to%20manipulate%20data%20on%20the%20instance%2C%20for%20example%0A%20%20%20*%20%60event.model.set('item.checked'%2C%20true)%3B%60.%0A%20%20%20*%0A%20%20%20*%20Alternatively%2C%20the%20model%20for%20a%20template%20instance%20for%20an%20element%20stamped%20by%0A%20%20%20*%20a%20%60dom-repeat%60%20can%20be%20obtained%20using%20the%20%60modelForElement%60%20API%20on%20the%0A%20%20%20*%20%60dom-repeat%60%20that%20stamped%20it%2C%20for%20example%0A%20%20%20*%20%60this.%24.domRepeat.modelForElement(event.target).set('item.checked'%2C%20true)%3B%60.%0A%20%20%20*%20This%20may%20be%20useful%20for%20manipulating%20instance%20data%20of%20event%20targets%20obtained%0A%20%20%20*%20by%20event%20handlers%20on%20parents%20of%20the%20%60dom-repeat%60%20(event%20delegation).%0A%20%20%20*%0A%20%20%20*%20A%20view-specific%20filter%2Fsort%20may%20be%20applied%20to%20each%20%60dom-repeat%60%20by%20supplying%20a%0A%20%20%20*%20%60filter%60%20and%2For%20%60sort%60%20property.%20%20This%20may%20be%20a%20string%20that%20names%20a%20function%20on%0A%20%20%20*%20the%20host%2C%20or%20a%20function%20may%20be%20assigned%20to%20the%20property%20directly.%20%20The%20functions%0A%20%20%20*%20should%20implemented%20following%20the%20standard%20%60Array%60%20filter%2Fsort%20API.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20re-run%20the%20filter%20or%20sort%20functions%20based%20on%20changes%20to%20sub-fields%0A%20%20%20*%20of%20%60items%60%2C%20the%20%60observe%60%20property%20may%20be%20set%20as%20a%20space-separated%20list%20of%0A%20%20%20*%20%60item%60%20sub-fields%20that%20should%20cause%20a%20re-filter%2Fsort%20when%20modified.%20%20If%0A%20%20%20*%20the%20filter%20or%20sort%20function%20depends%20on%20properties%20not%20contained%20in%20%60items%60%2C%0A%20%20%20*%20the%20user%20should%20observe%20changes%20to%20those%20properties%20and%20call%20%60render%60%20to%20update%0A%20%20%20*%20the%20view%20based%20on%20the%20dependency%20change.%0A%20%20%20*%0A%20%20%20*%20For%20example%2C%20for%20an%20%60dom-repeat%60%20with%20a%20filter%20of%20the%20following%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20isEngineer(item)%20%7B%0A%20%20%20*%20%20%20return%20item.type%20%3D%3D%20'engineer'%20%7C%7C%20item.manager.type%20%3D%3D%20'engineer'%3B%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20Then%20the%20%60observe%60%20property%20should%20be%20configured%20as%20follows%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-repeat%20items%3D%22%7B%7Bemployees%7D%7D%22%20filter%3D%22isEngineer%22%20observe%3D%22type%20manager.type%22%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40extends%20%7BdomRepeatBase%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.OptionalMutableData%0A%20%20%20*%20%40summary%20Custom%20element%20for%20stamping%20instance%20of%20a%20template%20bound%20to%0A%20%20%20*%20%20%20items%20in%20an%20array.%0A%20%20%20*%2Fvar%20DomRepeat%3Dfunction(_domRepeatBase)%7B_inherits(DomRepeat%2C_domRepeatBase)%3B_createClass(DomRepeat%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'dom-repeat'%3B%7D%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7Breturn%20null%3B%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7B%2F**%0A%20%20%20%20%20%20%20*%20Fired%20whenever%20DOM%20is%20added%20or%20removed%20by%20this%20template%20(by%0A%20%20%20%20%20%20%20*%20default%2C%20rendering%20occurs%20lazily).%20%20To%20force%20immediate%20rendering%2C%20call%0A%20%20%20%20%20%20%20*%20%60render%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40event%20dom-change%0A%20%20%20%20%20%20%20*%2Freturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20An%20array%20containing%20items%20determining%20how%20many%20instances%20of%20the%20template%0A%20%20%20%20%20%20%20%20%20*%20to%20stamp%20and%20that%20that%20each%20template%20instance%20should%20bind%20to.%0A%20%20%20%20%20%20%20%20%20*%2Fitems%3A%7Btype%3AArray%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20for%20the%20array%0A%20%20%20%20%20%20%20%20%20*%20element%20associated%20with%20a%20given%20template%20instance.%0A%20%20%20%20%20%20%20%20%20*%2Fas%3A%7Btype%3AString%2Cvalue%3A'item'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20with%20the%20index%0A%20%20%20%20%20%20%20%20%20*%20of%20the%20instance%20in%20the%20sorted%20and%20filtered%20list%20of%20rendered%20items.%0A%20%20%20%20%20%20%20%20%20*%20Note%2C%20for%20the%20index%20in%20the%20%60this.items%60%20array%2C%20use%20the%20value%20of%20the%0A%20%20%20%20%20%20%20%20%20*%20%60itemsIndexAs%60%20property.%0A%20%20%20%20%20%20%20%20%20*%2FindexAs%3A%7Btype%3AString%2Cvalue%3A'index'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20with%20the%20index%0A%20%20%20%20%20%20%20%20%20*%20of%20the%20instance%20in%20the%20%60this.items%60%20array.%20Note%2C%20for%20the%20index%20of%0A%20%20%20%20%20%20%20%20%20*%20this%20instance%20in%20the%20sorted%20and%20filtered%20list%20of%20rendered%20items%2C%0A%20%20%20%20%20%20%20%20%20*%20use%20the%20value%20of%20the%20%60indexAs%60%20property.%0A%20%20%20%20%20%20%20%20%20*%2FitemsIndexAs%3A%7Btype%3AString%2Cvalue%3A'itemsIndex'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20function%20that%20should%20determine%20the%20sort%20order%20of%20the%20items.%20%20This%0A%20%20%20%20%20%20%20%20%20*%20property%20should%20either%20be%20provided%20as%20a%20string%2C%20indicating%20a%20method%0A%20%20%20%20%20%20%20%20%20*%20name%20on%20the%20element's%20host%2C%20or%20else%20be%20an%20actual%20function.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20function%20should%20match%20the%20sort%20function%20passed%20to%20%60Array.sort%60.%0A%20%20%20%20%20%20%20%20%20*%20Using%20a%20sort%20function%20has%20no%20effect%20on%20the%20underlying%20%60items%60%20array.%0A%20%20%20%20%20%20%20%20%20*%2Fsort%3A%7Btype%3AFunction%2Cobserver%3A'__sortChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20function%20that%20can%20be%20used%20to%20filter%20items%20out%20of%20the%20view.%20%20This%0A%20%20%20%20%20%20%20%20%20*%20property%20should%20either%20be%20provided%20as%20a%20string%2C%20indicating%20a%20method%0A%20%20%20%20%20%20%20%20%20*%20name%20on%20the%20element's%20host%2C%20or%20else%20be%20an%20actual%20function.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20function%20should%20match%20the%20sort%20function%20passed%20to%20%60Array.filter%60.%0A%20%20%20%20%20%20%20%20%20*%20Using%20a%20filter%20function%20has%20no%20effect%20on%20the%20underlying%20%60items%60%20array.%0A%20%20%20%20%20%20%20%20%20*%2Ffilter%3A%7Btype%3AFunction%2Cobserver%3A'__filterChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20using%20a%20%60filter%60%20or%20%60sort%60%20function%2C%20the%20%60observe%60%20property%0A%20%20%20%20%20%20%20%20%20*%20should%20be%20set%20to%20a%20space-separated%20list%20of%20the%20names%20of%20item%0A%20%20%20%20%20%20%20%20%20*%20sub-fields%20that%20should%20trigger%20a%20re-sort%20or%20re-filter%20when%20changed.%0A%20%20%20%20%20%20%20%20%20*%20These%20should%20generally%20be%20fields%20of%20%60item%60%20that%20the%20sort%20or%20filter%0A%20%20%20%20%20%20%20%20%20*%20function%20depends%20on.%0A%20%20%20%20%20%20%20%20%20*%2Fobserve%3A%7Btype%3AString%2Cobserver%3A'__observeChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20using%20a%20%60filter%60%20or%20%60sort%60%20function%2C%20the%20%60delay%60%20property%0A%20%20%20%20%20%20%20%20%20*%20determines%20a%20debounce%20time%20in%20ms%20after%20a%20change%20to%20observed%20item%0A%20%20%20%20%20%20%20%20%20*%20properties%20that%20must%20pass%20before%20the%20filter%20or%20sort%20is%20re-run.%0A%20%20%20%20%20%20%20%20%20*%20This%20is%20useful%20in%20rate-limiting%20shuffling%20of%20the%20view%20when%0A%20%20%20%20%20%20%20%20%20*%20item%20changes%20may%20be%20frequent.%0A%20%20%20%20%20%20%20%20%20*%2Fdelay%3ANumber%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Count%20of%20currently%20rendered%20items%20after%20%60filter%60%20(if%20any)%20has%20been%20applied.%0A%20%20%20%20%20%20%20%20%20*%20If%20%22chunking%20mode%22%20is%20enabled%2C%20%60renderedItemCount%60%20is%20updated%20each%20time%20a%0A%20%20%20%20%20%20%20%20%20*%20set%20of%20template%20instances%20is%20rendered.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%2FrenderedItemCount%3A%7Btype%3ANumber%2Cnotify%3Atrue%2CreadOnly%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Defines%20an%20initial%20count%20of%20template%20instances%20to%20render%20after%20setting%0A%20%20%20%20%20%20%20%20%20*%20the%20%60items%60%20array%2C%20before%20the%20next%20paint%2C%20and%20puts%20the%20%60dom-repeat%60%0A%20%20%20%20%20%20%20%20%20*%20into%20%22chunking%20mode%22.%20%20The%20remaining%20items%20will%20be%20created%20and%20rendered%0A%20%20%20%20%20%20%20%20%20*%20incrementally%20at%20each%20animation%20frame%20therof%20until%20all%20instances%20have%0A%20%20%20%20%20%20%20%20%20*%20been%20rendered.%0A%20%20%20%20%20%20%20%20%20*%2FinitialCount%3A%7Btype%3ANumber%2Cobserver%3A'__initializeChunking'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20%60initialCount%60%20is%20used%2C%20this%20property%20defines%20a%20frame%20rate%20(in%0A%20%20%20%20%20%20%20%20%20*%20fps)%20to%20target%20by%20throttling%20the%20number%20of%20instances%20rendered%20each%0A%20%20%20%20%20%20%20%20%20*%20frame%20to%20not%20exceed%20the%20budget%20for%20the%20target%20frame%20rate.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20framerate%20is%20effectively%20the%20number%20of%20%60requestAnimationFrame%60s%20that%0A%20%20%20%20%20%20%20%20%20*%20it%20tries%20to%20allow%20to%20actually%20fire%20in%20a%20given%20second.%20It%20does%20this%0A%20%20%20%20%20%20%20%20%20*%20by%20measuring%20the%20time%20between%20%60rAF%60s%20and%20continuously%20adjusting%20the%0A%20%20%20%20%20%20%20%20%20*%20number%20of%20items%20created%20each%20%60rAF%60%20to%20maintain%20the%20target%20framerate.%0A%20%20%20%20%20%20%20%20%20*%20Setting%20this%20to%20a%20higher%20number%20allows%20lower%20latency%20and%20higher%0A%20%20%20%20%20%20%20%20%20*%20throughput%20for%20event%20handlers%20and%20other%20tasks%2C%20but%20results%20in%20a%0A%20%20%20%20%20%20%20%20%20*%20longer%20time%20for%20the%20remaining%20items%20to%20complete%20rendering.%0A%20%20%20%20%20%20%20%20%20*%2FtargetFramerate%3A%7Btype%3ANumber%2Cvalue%3A20%7D%2C_targetFrameTime%3A%7Btype%3ANumber%2Ccomputed%3A'__computeFrameTime(targetFramerate)'%7D%7D%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Breturn%5B'__itemsChanged(items.*)'%5D%3B%7D%7D%5D)%3Bfunction%20DomRepeat()%7B_classCallCheck(this%2CDomRepeat)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomRepeat.__proto__%7C%7CObject.getPrototypeOf(DomRepeat)).call(this))%3B_this.__instances%3D%5B%5D%3B_this.__limit%3DInfinity%3B_this.__pool%3D%5B%5D%3B_this.__renderDebouncer%3Dnull%3B_this.__itemsIdxToInstIdx%3D%7B%7D%3B_this.__chunkCount%3Dnull%3B_this.__lastChunkTime%3Dnull%3B_this.__sortFn%3Dnull%3B_this.__filterFn%3Dnull%3B_this.__observePaths%3Dnull%3B_this.__ctor%3Dnull%3B_this.__isDetached%3Dtrue%3B_this.template%3Dnull%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(DomRepeat%2C%5B%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(DomRepeat.prototype.__proto__%7C%7CObject.getPrototypeOf(DomRepeat.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bthis.__isDetached%3Dtrue%3Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__detachInstance(i)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(DomRepeat.prototype.__proto__%7C%7CObject.getPrototypeOf(DomRepeat.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.style.display%3D'none'%3B%2F%2F%20only%20perform%20attachment%20if%20the%20element%20was%20previously%20detached.%0Aif(this.__isDetached)%7Bthis.__isDetached%3Dfalse%3Bvar%20parent%3Dthis.parentNode%3Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__attachInstance(i%2Cparent)%3B%7D%7D%7D%7D%2C%7Bkey%3A'__ensureTemplatized'%2Cvalue%3Afunction%20__ensureTemplatized()%7Bvar%20_this2%3Dthis%3B%2F%2F%20Templatizing%20(generating%20the%20instance%20constructor)%20needs%20to%20wait%0A%2F%2F%20until%20ready%2C%20since%20won't%20have%20its%20template%20content%20handed%20back%20to%0A%2F%2F%20it%20until%20then%0Aif(!this.__ctor)%7Bvar%20template%3Dthis.template%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Bif(_this2.querySelector('template'))%7Bobserver.disconnect()%3B_this2.__render()%3B%7Delse%7Bthrow%20new%20Error('dom-repeat%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%20false%3B%7D%2F%2F%20Template%20instance%20props%20that%20should%20be%20excluded%20from%20forwarding%0Avar%20instanceProps%3D%7B%7D%3BinstanceProps%5Bthis.as%5D%3Dtrue%3BinstanceProps%5Bthis.indexAs%5D%3Dtrue%3BinstanceProps%5Bthis.itemsIndexAs%5D%3Dtrue%3Bthis.__ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7BmutableData%3Athis.mutableData%2CparentModel%3Atrue%2CinstanceProps%3AinstanceProps%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20set%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20property%20to%0A%20%20%20%20%20%20%20%20%20%20%20*%2FforwardHostProp%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bvar%20i%24%3Dthis.__instances%3Bfor(var%20i%3D0%2Cinst%3Bi%3Ci%24.length%26%26(inst%3Di%24%5Bi%5D)%3Bi%2B%2B)%7Binst.forwardHostProp(prop%2Cvalue)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20inst%20Instance%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%2FnotifyInstanceProp%3Afunction%20notifyInstanceProp(inst%2Cprop%2Cvalue)%7Bif(Polymer.Path.matches(this.as%2Cprop))%7Bvar%20idx%3Dinst%5Bthis.itemsIndexAs%5D%3Bif(prop%3D%3Dthis.as)%7Bthis.items%5Bidx%5D%3Dvalue%3B%7Dvar%20path%3DPolymer.Path.translate(this.as%2C'items.'%2Bidx%2Cprop)%3Bthis.notifyPath(path%2Cvalue)%3B%7D%7D%7D)%3B%7Dreturn%20true%3B%7D%7D%2C%7Bkey%3A'__getMethodHost'%2Cvalue%3Afunction%20__getMethodHost()%7B%2F%2F%20Technically%20this%20should%20be%20the%20owner%20of%20the%20outermost%20template.%0A%2F%2F%20In%20shadow%20dom%2C%20this%20is%20always%20getRootNode().host%2C%20but%20we%20can%0A%2F%2F%20approximate%20this%20via%20cooperation%20with%20our%20dataHost%20always%20setting%0A%2F%2F%20%60_methodHost%60%20as%20long%20as%20there%20were%20bindings%20(or%20id's)%20on%20this%0A%2F%2F%20instance%20causing%20it%20to%20get%20a%20dataHost.%0Areturn%20this.__dataHost._methodHost%7C%7Cthis.__dataHost%3B%7D%7D%2C%7Bkey%3A'__functionFromPropertyValue'%2Cvalue%3Afunction%20__functionFromPropertyValue(functionOrMethodName)%7Bif(typeof%20functionOrMethodName%3D%3D%3D'string')%7Bvar%20methodName%3DfunctionOrMethodName%3Bvar%20obj%3Dthis.__getMethodHost()%3Breturn%20function()%7Breturn%20obj%5BmethodName%5D.apply(obj%2Carguments)%3B%7D%3B%7Dreturn%20functionOrMethodName%3B%7D%7D%2C%7Bkey%3A'__sortChanged'%2Cvalue%3Afunction%20__sortChanged(sort)%7Bthis.__sortFn%3Dthis.__functionFromPropertyValue(sort)%3Bif(this.items)%7Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__filterChanged'%2Cvalue%3Afunction%20__filterChanged(filter)%7Bthis.__filterFn%3Dthis.__functionFromPropertyValue(filter)%3Bif(this.items)%7Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__computeFrameTime'%2Cvalue%3Afunction%20__computeFrameTime(rate)%7Breturn%20Math.ceil(1000%2Frate)%3B%7D%7D%2C%7Bkey%3A'__initializeChunking'%2Cvalue%3Afunction%20__initializeChunking()%7Bif(this.initialCount)%7Bthis.__limit%3Dthis.initialCount%3Bthis.__chunkCount%3Dthis.initialCount%3Bthis.__lastChunkTime%3Dperformance.now()%3B%7D%7D%7D%2C%7Bkey%3A'__tryRenderChunk'%2Cvalue%3Afunction%20__tryRenderChunk()%7B%2F%2F%20Debounced%20so%20that%20multiple%20calls%20through%20%60_render%60%20between%20animation%0A%2F%2F%20frames%20only%20queue%20one%20new%20rAF%20(e.g.%20array%20mutation%20%26%20chunked%20render)%0Aif(this.items%26%26this.__limit%3Cthis.items.length)%7Bthis.__debounceRender(this.__requestRenderChunk)%3B%7D%7D%7D%2C%7Bkey%3A'__requestRenderChunk'%2Cvalue%3Afunction%20__requestRenderChunk()%7Bvar%20_this3%3Dthis%3BrequestAnimationFrame(function()%7Breturn%20_this3.__renderChunk()%3B%7D)%3B%7D%7D%2C%7Bkey%3A'__renderChunk'%2Cvalue%3Afunction%20__renderChunk()%7B%2F%2F%20Simple%20auto%20chunkSize%20throttling%20algorithm%20based%20on%20feedback%20loop%3A%0A%2F%2F%20measure%20actual%20time%20between%20frames%20and%20scale%20chunk%20count%20by%20ratio%0A%2F%2F%20of%20target%2Factual%20frame%20time%0Avar%20currChunkTime%3Dperformance.now()%3Bvar%20ratio%3Dthis._targetFrameTime%2F(currChunkTime-this.__lastChunkTime)%3Bthis.__chunkCount%3DMath.round(this.__chunkCount*ratio)%7C%7C1%3Bthis.__limit%2B%3Dthis.__chunkCount%3Bthis.__lastChunkTime%3DcurrChunkTime%3Bthis.__debounceRender(this.__render)%3B%7D%7D%2C%7Bkey%3A'__observeChanged'%2Cvalue%3Afunction%20__observeChanged()%7Bthis.__observePaths%3Dthis.observe%26%26this.observe.replace('.*'%2C'.').split('%20')%3B%7D%7D%2C%7Bkey%3A'__itemsChanged'%2Cvalue%3Afunction%20__itemsChanged(change)%7Bif(this.items%26%26!Array.isArray(this.items))%7Bconsole.warn('dom-repeat%20expected%20array%20for%20%60items%60%2C%20found'%2Cthis.items)%3B%7D%2F%2F%20If%20path%20was%20to%20an%20item%20(e.g.%20'items.3'%20or%20'items.3.foo')%2C%20forward%20the%0A%2F%2F%20path%20to%20that%20instance%20synchronously%20(returns%20false%20for%20non-item%20paths)%0Aif(!this.__handleItemPath(change.path%2Cchange.value))%7B%2F%2F%20Otherwise%2C%20the%20array%20was%20reset%20('items')%20or%20spliced%20('items.splices')%2C%0A%2F%2F%20so%20queue%20a%20full%20refresh%0Athis.__initializeChunking()%3Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__handleObservedPaths'%2Cvalue%3Afunction%20__handleObservedPaths(path)%7B%2F%2F%20Handle%20cases%20where%20path%20changes%20should%20cause%20a%20re-sort%2Ffilter%0Aif(this.__sortFn%7C%7Cthis.__filterFn)%7Bif(!path)%7B%2F%2F%20Always%20re-render%20if%20the%20item%20itself%20changed%0Athis.__debounceRender(this.__render%2Cthis.delay)%3B%7Delse%20if(this.__observePaths)%7B%2F%2F%20Otherwise%2C%20re-render%20if%20the%20path%20changed%20matches%20an%20observed%20path%0Avar%20paths%3Dthis.__observePaths%3Bfor(var%20i%3D0%3Bi%3Cpaths.length%3Bi%2B%2B)%7Bif(path.indexOf(paths%5Bi%5D)%3D%3D%3D0)%7Bthis.__debounceRender(this.__render%2Cthis.delay)%3B%7D%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7Bfunction(this%3ADomRepeat)%7D%20fn%20Function%20to%20debounce.%0A%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Delay%20in%20ms%20to%20debounce%20by.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'__debounceRender'%2Cvalue%3Afunction%20__debounceRender(fn)%7Bvar%20delay%3Darguments.length%3E1%26%26arguments%5B1%5D!%3D%3Dundefined%3Farguments%5B1%5D%3A0%3Bthis.__renderDebouncer%3DPolymer.Debouncer.debounce(this.__renderDebouncer%2Cdelay%3E0%3FPolymer.Async.timeOut.after(delay)%3APolymer.Async.microTask%2Cfn.bind(this))%3BPolymer.enqueueDebouncer(this.__renderDebouncer)%3B%7D%2F**%0A%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20Normally%20rendering%20is%0A%20%20%20%20%20*%20asynchronous%20to%20a%20provoking%20change.%20This%20is%20done%20for%20efficiency%20so%0A%20%20%20%20%20*%20that%20multiple%20changes%20trigger%20only%20a%20single%20render.%20The%20render%20method%0A%20%20%20%20%20*%20should%20be%20called%20if%2C%20for%20example%2C%20template%20rendering%20is%20required%20to%0A%20%20%20%20%20*%20validate%20application%20state.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7B%2F%2F%20Queue%20this%20repeater%2C%20then%20flush%20all%20in%20order%0Athis.__debounceRender(this.__render)%3BPolymer.flush()%3B%7D%7D%2C%7Bkey%3A'__render'%2Cvalue%3Afunction%20__render()%7Bif(!this.__ensureTemplatized())%7B%2F%2F%20No%20template%20found%20yet%0Areturn%3B%7Dthis.__applyFullRefresh()%3B%2F%2F%20Reset%20the%20pool%0A%2F%2F%20TODO(kschaaf)%3A%20Reuse%20pool%20across%20turns%20and%20nested%20templates%0A%2F%2F%20Now%20that%20objects%2Farrays%20are%20re-evaluated%20when%20set%2C%20we%20can%20safely%0A%2F%2F%20reuse%20pooled%20instances%20across%20turns%2C%20however%20we%20still%20need%20to%20decide%0A%2F%2F%20semantics%20regarding%20how%20long%20to%20hold%2C%20how%20many%20to%20hold%2C%20etc.%0Athis.__pool.length%3D0%3B%2F%2F%20Set%20rendered%20item%20count%0Athis._setRenderedItemCount(this.__instances.length)%3B%2F%2F%20Notify%20users%0Athis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3B%2F%2F%20Check%20to%20see%20if%20we%20need%20to%20render%20more%20items%0Athis.__tryRenderChunk()%3B%7D%7D%2C%7Bkey%3A'__applyFullRefresh'%2Cvalue%3Afunction%20__applyFullRefresh()%7Bvar%20_this4%3Dthis%3Bvar%20items%3Dthis.items%7C%7C%5B%5D%3Bvar%20isntIdxToItemsIdx%3Dnew%20Array(items.length)%3Bfor(var%20i%3D0%3Bi%3Citems.length%3Bi%2B%2B)%7BisntIdxToItemsIdx%5Bi%5D%3Di%3B%7D%2F%2F%20Apply%20user%20filter%0Aif(this.__filterFn)%7BisntIdxToItemsIdx%3DisntIdxToItemsIdx.filter(function(i%2Cidx%2Carray)%7Breturn%20_this4.__filterFn(items%5Bi%5D%2Cidx%2Carray)%3B%7D)%3B%7D%2F%2F%20Apply%20user%20sort%0Aif(this.__sortFn)%7BisntIdxToItemsIdx.sort(function(a%2Cb)%7Breturn%20_this4.__sortFn(items%5Ba%5D%2Citems%5Bb%5D)%3B%7D)%3B%7D%2F%2F%20items-%3Einst%20map%20kept%20for%20item%20path%20forwarding%0Avar%20itemsIdxToInstIdx%3Dthis.__itemsIdxToInstIdx%3D%7B%7D%3Bvar%20instIdx%3D0%3B%2F%2F%20Generate%20instances%20and%20assign%20items%0Avar%20limit%3DMath.min(isntIdxToItemsIdx.length%2Cthis.__limit)%3Bfor(%3BinstIdx%3Climit%3BinstIdx%2B%2B)%7Bvar%20inst%3Dthis.__instances%5BinstIdx%5D%3Bvar%20itemIdx%3DisntIdxToItemsIdx%5BinstIdx%5D%3Bvar%20item%3Ditems%5BitemIdx%5D%3BitemsIdxToInstIdx%5BitemIdx%5D%3DinstIdx%3Bif(inst)%7Binst._setPendingProperty(this.as%2Citem)%3Binst._setPendingProperty(this.indexAs%2CinstIdx)%3Binst._setPendingProperty(this.itemsIndexAs%2CitemIdx)%3Binst._flushProperties()%3B%7Delse%7Bthis.__insertInstance(item%2CinstIdx%2CitemIdx)%3B%7D%7D%2F%2F%20Remove%20any%20extra%20instances%20from%20previous%20state%0Afor(var%20_i%3Dthis.__instances.length-1%3B_i%3E%3DinstIdx%3B_i--)%7Bthis.__detachAndRemoveInstance(_i)%3B%7D%7D%7D%2C%7Bkey%3A'__detachInstance'%2Cvalue%3Afunction%20__detachInstance(idx)%7Bvar%20inst%3Dthis.__instances%5Bidx%5D%3Bfor(var%20i%3D0%3Bi%3Cinst.children.length%3Bi%2B%2B)%7Bvar%20el%3Dinst.children%5Bi%5D%3Binst.root.appendChild(el)%3B%7Dreturn%20inst%3B%7D%7D%2C%7Bkey%3A'__attachInstance'%2Cvalue%3Afunction%20__attachInstance(idx%2Cparent)%7Bvar%20inst%3Dthis.__instances%5Bidx%5D%3Bparent.insertBefore(inst.root%2Cthis)%3B%7D%7D%2C%7Bkey%3A'__detachAndRemoveInstance'%2Cvalue%3Afunction%20__detachAndRemoveInstance(idx)%7Bvar%20inst%3Dthis.__detachInstance(idx)%3Bif(inst)%7Bthis.__pool.push(inst)%3B%7Dthis.__instances.splice(idx%2C1)%3B%7D%7D%2C%7Bkey%3A'__stampInstance'%2Cvalue%3Afunction%20__stampInstance(item%2CinstIdx%2CitemIdx)%7Bvar%20model%3D%7B%7D%3Bmodel%5Bthis.as%5D%3Ditem%3Bmodel%5Bthis.indexAs%5D%3DinstIdx%3Bmodel%5Bthis.itemsIndexAs%5D%3DitemIdx%3Breturn%20new%20this.__ctor(model)%3B%7D%7D%2C%7Bkey%3A'__insertInstance'%2Cvalue%3Afunction%20__insertInstance(item%2CinstIdx%2CitemIdx)%7Bvar%20inst%3Dthis.__pool.pop()%3Bif(inst)%7B%2F%2F%20TODO(kschaaf)%3A%20If%20the%20pool%20is%20shared%20across%20turns%2C%20hostProps%0A%2F%2F%20need%20to%20be%20re-set%20to%20reused%20instances%20in%20addition%20to%20item%0Ainst._setPendingProperty(this.as%2Citem)%3Binst._setPendingProperty(this.indexAs%2CinstIdx)%3Binst._setPendingProperty(this.itemsIndexAs%2CitemIdx)%3Binst._flushProperties()%3B%7Delse%7Binst%3Dthis.__stampInstance(item%2CinstIdx%2CitemIdx)%3B%7Dvar%20beforeRow%3Dthis.__instances%5BinstIdx%2B1%5D%3Bvar%20beforeNode%3DbeforeRow%3FbeforeRow.children%5B0%5D%3Athis%3Bthis.parentNode.insertBefore(inst.root%2CbeforeNode)%3Bthis.__instances%5BinstIdx%5D%3Dinst%3Breturn%20inst%3B%7D%2F%2F%20Implements%20extension%20point%20from%20Templatize%20mixin%0A%2F**%0A%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hidden%20Set%20to%20true%20to%20hide%20the%20children%3B%0A%20%20%20%20%20*%20set%20to%20false%20to%20show%20them.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren(hidden)%7Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__instances%5Bi%5D._showHideChildren(hidden)%3B%7D%7D%2F%2F%20Called%20as%20a%20side%20effect%20of%20a%20host%20items.%3Ckey%3E.%3Cpath%3E%20path%20change%2C%0A%2F%2F%20responsible%20for%20notifying%20item.%3Cpath%3E%20changes%20to%20inst%20for%20key%0A%7D%2C%7Bkey%3A'__handleItemPath'%2Cvalue%3Afunction%20__handleItemPath(path%2Cvalue)%7Bvar%20itemsPath%3Dpath.slice(6)%3B%2F%2F%20'items.'.length%20%3D%3D%206%0Avar%20dot%3DitemsPath.indexOf('.')%3Bvar%20itemsIdx%3Ddot%3C0%3FitemsPath%3AitemsPath.substring(0%2Cdot)%3B%2F%2F%20If%20path%20was%20index%20into%20array...%0Aif(itemsIdx%3D%3DparseInt(itemsIdx%2C10))%7Bvar%20itemSubPath%3Ddot%3C0%3F''%3AitemsPath.substring(dot%2B1)%3B%2F%2F%20If%20the%20path%20is%20observed%2C%20it%20will%20trigger%20a%20full%20refresh%0Athis.__handleObservedPaths(itemSubPath)%3B%2F%2F%20Note%2C%20even%20if%20a%20rull%20refresh%20is%20triggered%2C%20always%20do%20the%20path%0A%2F%2F%20notification%20because%20unless%20mutableData%20is%20used%20for%20dom-repeat%0A%2F%2F%20and%20all%20elements%20in%20the%20instance%20subtree%2C%20a%20full%20refresh%20may%0A%2F%2F%20not%20trigger%20the%20proper%20update.%0Avar%20instIdx%3Dthis.__itemsIdxToInstIdx%5BitemsIdx%5D%3Bvar%20inst%3Dthis.__instances%5BinstIdx%5D%3Bif(inst)%7Bvar%20itemPath%3Dthis.as%2B(itemSubPath%3F'.'%2BitemSubPath%3A'')%3B%2F%2F%20This%20is%20effectively%20%60notifyPath%60%2C%20but%20avoids%20some%20of%20the%20overhead%0A%2F%2F%20of%20the%20public%20API%0Ainst._setPendingPropertyOrPath(itemPath%2Cvalue%2Cfalse%2Ctrue)%3Binst._flushProperties()%3B%7Dreturn%20true%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20item%20associated%20with%20a%20given%20element%20stamped%20by%0A%20%20%20%20%20*%20this%20%60dom-repeat%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%2C%20to%20modify%20sub-properties%20of%20the%20item%2C%0A%20%20%20%20%20*%20%60modelForElement(el).set('item.%3Csub-prop%3E'%2C%20value)%60%0A%20%20%20%20%20*%20should%20be%20used.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20the%20item.%0A%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20associated%20with%20the%20element.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'itemForElement'%2Cvalue%3Afunction%20itemForElement(el)%7Bvar%20instance%3Dthis.modelForElement(el)%3Breturn%20instance%26%26instance%5Bthis.as%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20inst%20index%20for%20a%20given%20element%20stamped%20by%20this%20%60dom-repeat%60.%0A%20%20%20%20%20*%20If%20%60sort%60%20is%20provided%2C%20the%20index%20will%20reflect%20the%20sorted%20order%20(rather%0A%20%20%20%20%20*%20than%20the%20original%20array%20order).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20the%20index.%0A%20%20%20%20%20*%20%40return%20%7B%3Fnumber%7D%20Row%20index%20associated%20with%20the%20element%20(note%20this%20may%0A%20%20%20%20%20*%20%20%20not%20correspond%20to%20the%20array%20index%20if%20a%20user%20%60sort%60%20is%20applied).%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'indexForElement'%2Cvalue%3Afunction%20indexForElement(el)%7Bvar%20instance%3Dthis.modelForElement(el)%3Breturn%20instance%26%26instance%5Bthis.indexAs%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20associated%20with%20a%20given%20element%2C%20which%0A%20%20%20%20%20*%20serves%20as%20the%20binding%20scope%20for%20the%20template%20instance%20the%20element%20is%0A%20%20%20%20%20*%20contained%20in.%20A%20template%20model%20is%20an%20instance%20of%20%60Polymer.Base%60%2C%20and%0A%20%20%20%20%20*%20should%20be%20used%20to%20manipulate%20data%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20let%20model%20%3D%20modelForElement(el)%3B%0A%20%20%20%20%20*%20%20%20if%20(model.index%20%3C%2010)%20%7B%0A%20%20%20%20%20*%20%20%20%20%20model.set('item.checked'%2C%20true)%3B%0A%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Model%20representing%20the%20binding%20scope%20for%0A%20%20%20%20%20*%20%20%20the%20element.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'modelForElement'%2Cvalue%3Afunction%20modelForElement(el)%7Breturn%20Polymer.Templatize.modelForElement(this.template%2Cel)%3B%7D%7D%5D)%3Breturn%20DomRepeat%3B%7D(domRepeatBase)%3BcustomElements.define(DomRepeat.is%2CDomRepeat)%3B%2F**%20%40const%20*%2FPolymer.DomRepeat%3DDomRepeat%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-repeat.html.js%0A",
            "resourceBytes": 25690,
            "encodedBytes": 0,
            "unusedBytes": 11689
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20The%20%60%3Cdom-if%3E%60%20element%20will%20stamp%20a%20light-dom%20%60%3Ctemplate%3E%60%20child%20when%0A%20%20%20*%20the%20%60if%60%20property%20becomes%20truthy%2C%20and%20the%20template%20can%20use%20Polymer%0A%20%20%20*%20data-binding%20and%20declarative%20event%20features%20when%20used%20in%20the%20context%20of%0A%20%20%20*%20a%20Polymer%20element's%20template.%0A%20%20%20*%0A%20%20%20*%20When%20%60if%60%20becomes%20falsy%2C%20the%20stamped%20content%20is%20hidden%20but%20not%0A%20%20%20*%20removed%20from%20dom.%20When%20%60if%60%20subsequently%20becomes%20truthy%20again%2C%20the%20content%0A%20%20%20*%20is%20simply%20re-shown.%20This%20approach%20is%20used%20due%20to%20its%20favorable%20performance%0A%20%20%20*%20characteristics%3A%20the%20expense%20of%20creating%20template%20content%20is%20paid%20only%0A%20%20%20*%20once%20and%20lazily.%0A%20%20%20*%0A%20%20%20*%20Set%20the%20%60restamp%60%20property%20to%20true%20to%20force%20the%20stamped%20content%20to%20be%0A%20%20%20*%20created%20%2F%20destroyed%20when%20the%20%60if%60%20condition%20changes.%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40extends%20Polymer.Element%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20conditionally%20stamps%20and%20hides%20or%20removes%0A%20%20%20*%20%20%20template%20content%20based%20on%20a%20boolean%20flag.%0A%20%20%20*%2Fvar%20DomIf%3Dfunction(_Polymer%24Element)%7B_inherits(DomIf%2C_Polymer%24Element)%3B_createClass(DomIf%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'dom-if'%3B%7D%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7Breturn%20null%3B%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20Fired%20whenever%20DOM%20is%20added%20or%20removed%2Fhidden%20by%20this%20template%20(by%0A%20%20%20%20%20%20%20%20%20*%20default%2C%20rendering%20occurs%20lazily).%20%20To%20force%20immediate%20rendering%2C%20call%0A%20%20%20%20%20%20%20%20%20*%20%60render%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40event%20dom-change%0A%20%20%20%20%20%20%20%20%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20boolean%20indicating%20whether%20this%20template%20should%20stamp.%0A%20%20%20%20%20%20%20%20%20*%2Fif%3A%7Btype%3ABoolean%2Cobserver%3A'__debounceRender'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20true%2C%20elements%20will%20be%20removed%20from%20DOM%20and%20discarded%20when%20%60if%60%0A%20%20%20%20%20%20%20%20%20*%20becomes%20false%20and%20re-created%20and%20added%20back%20to%20the%20DOM%20when%20%60if%60%0A%20%20%20%20%20%20%20%20%20*%20becomes%20true.%20%20By%20default%2C%20stamped%20elements%20will%20be%20hidden%20but%20left%0A%20%20%20%20%20%20%20%20%20*%20in%20the%20DOM%20when%20%60if%60%20becomes%20false%2C%20which%20is%20generally%20results%0A%20%20%20%20%20%20%20%20%20*%20in%20better%20performance.%0A%20%20%20%20%20%20%20%20%20*%2Frestamp%3A%7Btype%3ABoolean%2Cobserver%3A'__debounceRender'%7D%7D%3B%7D%7D%5D)%3Bfunction%20DomIf()%7B_classCallCheck(this%2CDomIf)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomIf.__proto__%7C%7CObject.getPrototypeOf(DomIf)).call(this))%3B_this.__renderDebouncer%3Dnull%3B_this.__invalidProps%3Dnull%3B_this.__instance%3Dnull%3B_this._lastIf%3Dfalse%3B_this.__ctor%3Dnull%3Breturn%20_this%3B%7D_createClass(DomIf%2C%5B%7Bkey%3A'__debounceRender'%2Cvalue%3Afunction%20__debounceRender()%7Bvar%20_this2%3Dthis%3B%2F%2F%20Render%20is%20async%20for%202%20reasons%3A%0A%2F%2F%201.%20To%20eliminate%20dom%20creation%20trashing%20if%20user%20code%20thrashes%20%60if%60%20in%20the%0A%2F%2F%20%20%20%20same%20turn.%20This%20was%20more%20common%20in%201.x%20where%20a%20compound%20computed%0A%2F%2F%20%20%20%20property%20could%20result%20in%20the%20result%20changing%20multiple%20times%2C%20but%20is%0A%2F%2F%20%20%20%20mitigated%20to%20a%20large%20extent%20by%20batched%20property%20processing%20in%202.x.%0A%2F%2F%202.%20To%20avoid%20double%20object%20propagation%20when%20a%20bag%20including%20values%20bound%0A%2F%2F%20%20%20%20to%20the%20%60if%60%20property%20as%20well%20as%20one%20or%20more%20hostProps%20could%20enqueue%0A%2F%2F%20%20%20%20the%20%3Cdom-if%3E%20to%20flush%20before%20the%20%3Ctemplate%3E's%20host%20property%0A%2F%2F%20%20%20%20forwarding.%20In%20that%20scenario%20creating%20an%20instance%20would%20result%20in%0A%2F%2F%20%20%20%20the%20host%20props%20being%20set%20once%2C%20and%20then%20the%20enqueued%20changes%20on%20the%0A%2F%2F%20%20%20%20template%20would%20set%20properties%20a%20second%20time%2C%20potentially%20causing%20an%0A%2F%2F%20%20%20%20object%20to%20be%20set%20to%20an%20instance%20more%20than%20once.%20%20Creating%20the%0A%2F%2F%20%20%20%20instance%20async%20from%20flushing%20data%20ensures%20this%20doesn't%20happen.%20If%0A%2F%2F%20%20%20%20we%20wanted%20a%20sync%20option%20in%20the%20future%2C%20simply%20having%20%3Cdom-if%3E%20flush%0A%2F%2F%20%20%20%20(or%20clear)%20its%20template's%20pending%20host%20properties%20before%20creating%0A%2F%2F%20%20%20%20the%20instance%20would%20also%20avoid%20the%20problem.%0Athis.__renderDebouncer%3DPolymer.Debouncer.debounce(this.__renderDebouncer%2CPolymer.Async.microTask%2Cfunction()%7Breturn%20_this2.__render()%3B%7D)%3BPolymer.enqueueDebouncer(this.__renderDebouncer)%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(DomIf.prototype.__proto__%7C%7CObject.getPrototypeOf(DomIf.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bif(!this.parentNode%7C%7Cthis.parentNode.nodeType%3D%3DNode.DOCUMENT_FRAGMENT_NODE%26%26!this.parentNode.host)%7Bthis.__teardownInstance()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(DomIf.prototype.__proto__%7C%7CObject.getPrototypeOf(DomIf.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.style.display%3D'none'%3Bif(this.if)%7Bthis.__debounceRender()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20Normally%20rendering%20is%0A%20%20%20%20%20*%20asynchronous%20to%20a%20provoking%20change.%20This%20is%20done%20for%20efficiency%20so%0A%20%20%20%20%20*%20that%20multiple%20changes%20trigger%20only%20a%20single%20render.%20The%20render%20method%0A%20%20%20%20%20*%20should%20be%20called%20if%2C%20for%20example%2C%20template%20rendering%20is%20required%20to%0A%20%20%20%20%20*%20validate%20application%20state.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7BPolymer.flush()%3B%7D%7D%2C%7Bkey%3A'__render'%2Cvalue%3Afunction%20__render()%7Bif(this.if)%7Bif(!this.__ensureInstance())%7B%2F%2F%20No%20template%20found%20yet%0Areturn%3B%7Dthis._showHideChildren()%3B%7Delse%20if(this.restamp)%7Bthis.__teardownInstance()%3B%7Dif(!this.restamp%26%26this.__instance)%7Bthis._showHideChildren()%3B%7Dif(this.if!%3Dthis._lastIf)%7Bthis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3Bthis._lastIf%3Dthis.if%3B%7D%7D%7D%2C%7Bkey%3A'__ensureInstance'%2Cvalue%3Afunction%20__ensureInstance()%7Bvar%20_this3%3Dthis%3Bvar%20parentNode%3Dthis.parentNode%3B%2F%2F%20Guard%20against%20element%20being%20detached%20while%20render%20was%20queued%0Aif(parentNode)%7Bif(!this.__ctor)%7Bvar%20template%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Bif(_this3.querySelector('template'))%7Bobserver.disconnect()%3B_this3.__render()%3B%7Delse%7Bthrow%20new%20Error('dom-if%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%20false%3B%7Dthis.__ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7B%2F%2F%20dom-if%20templatizer%20instances%20require%20%60mutable%3A%20true%60%2C%20as%0A%2F%2F%20%60__syncHostProperties%60%20relies%20on%20that%20behavior%20to%20sync%20objects%0AmutableData%3Atrue%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20forward%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20property%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%2FforwardHostProp%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bif(this.__instance)%7Bif(this.if)%7Bthis.__instance.forwardHostProp(prop%2Cvalue)%3B%7Delse%7B%2F%2F%20If%20we%20have%20an%20instance%20but%20are%20squelching%20host%20property%0A%2F%2F%20forwarding%20due%20to%20if%20being%20false%2C%20note%20the%20invalidated%0A%2F%2F%20properties%20so%20%60__syncHostProperties%60%20can%20sync%20them%20the%20next%0A%2F%2F%20time%20%60if%60%20becomes%20true%0Athis.__invalidProps%3Dthis.__invalidProps%7C%7CObject.create(null)%3Bthis.__invalidProps%5BPolymer.Path.root(prop)%5D%3Dtrue%3B%7D%7D%7D%7D)%3B%7Dif(!this.__instance)%7Bthis.__instance%3Dnew%20this.__ctor()%3BparentNode.insertBefore(this.__instance.root%2Cthis)%3B%7Delse%7Bthis.__syncHostProperties()%3Bvar%20c%24%3Dthis.__instance.children%3Bif(c%24%26%26c%24.length)%7B%2F%2F%20Detect%20case%20where%20dom-if%20was%20re-attached%20in%20new%20position%0Avar%20lastChild%3Dthis.previousSibling%3Bif(lastChild!%3D%3Dc%24%5Bc%24.length-1%5D)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cc%24.length%26%26(n%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7BparentNode.insertBefore(n%2Cthis)%3B%7D%7D%7D%7D%7Dreturn%20true%3B%7D%7D%2C%7Bkey%3A'__syncHostProperties'%2Cvalue%3Afunction%20__syncHostProperties()%7Bvar%20props%3Dthis.__invalidProps%3Bif(props)%7Bfor(var%20prop%20in%20props)%7Bthis.__instance._setPendingProperty(prop%2Cthis.__dataHost%5Bprop%5D)%3B%7Dthis.__invalidProps%3Dnull%3Bthis.__instance._flushProperties()%3B%7D%7D%7D%2C%7Bkey%3A'__teardownInstance'%2Cvalue%3Afunction%20__teardownInstance()%7Bif(this.__instance)%7Bvar%20c%24%3Dthis.__instance.children%3Bif(c%24%26%26c%24.length)%7B%2F%2F%20use%20first%20child%20parent%2C%20for%20case%20when%20dom-if%20may%20have%20been%20detached%0Avar%20parent%3Dc%24%5B0%5D.parentNode%3B%2F%2F%20Instance%20children%20may%20be%20disconnected%20from%20parents%20when%20dom-if%0A%2F%2F%20detaches%20if%20a%20tree%20was%20innerHTML'ed%0Aif(parent)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cc%24.length%26%26(n%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7Bparent.removeChild(n)%3B%7D%7D%7Dthis.__instance%3Dnull%3Bthis.__invalidProps%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren()%7Bvar%20hidden%3Dthis.__hideTemplateChildren__%7C%7C!this.if%3Bif(this.__instance)%7Bthis.__instance._showHideChildren(hidden)%3B%7D%7D%7D%5D)%3Breturn%20DomIf%3B%7D(Polymer.Element)%3BcustomElements.define(DomIf.is%2CDomIf)%3B%2F**%20%40const%20*%2FPolymer.DomIf%3DDomIf%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-if.html.js%0A",
            "resourceBytes": 10133,
            "encodedBytes": 0,
            "unusedBytes": 5870
          },
          {
            "name": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Element%20mixin%20for%20recording%20dynamic%20associations%20between%20item%20paths%20in%20a%0A%20%20%20*%20master%20%60items%60%20array%20and%20a%20%60selected%60%20array%20such%20that%20path%20changes%20to%20the%0A%20%20%20*%20master%20array%20(at%20the%20host)%20element%20or%20elsewhere%20via%20data-binding)%20are%0A%20%20%20*%20correctly%20propagated%20to%20items%20in%20the%20selected%20array%20and%20vice-versa.%0A%20%20%20*%0A%20%20%20*%20The%20%60items%60%20property%20accepts%20an%20array%20of%20user%20data%2C%20and%20via%20the%0A%20%20%20*%20%60select(item)%60%20and%20%60deselect(item)%60%20API%2C%20updates%20the%20%60selected%60%20property%0A%20%20%20*%20which%20may%20be%20bound%20to%20other%20parts%20of%20the%20application%2C%20and%20any%20changes%20to%0A%20%20%20*%20sub-fields%20of%20%60selected%60%20item(s)%20will%20be%20kept%20in%20sync%20with%20items%20in%20the%0A%20%20%20*%20%60items%60%20array.%20%20When%20%60multi%60%20is%20false%2C%20%60selected%60%20is%20a%20property%0A%20%20%20*%20representing%20the%20last%20selected%20item.%20%20When%20%60multi%60%20is%20true%2C%20%60selected%60%0A%20%20%20*%20is%20an%20array%20of%20multiply%20selected%20items.%0A%20%20%20*%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20mixin%20for%20recording%20dynamic%20associations%20between%20item%20paths%20in%20a%0A%20%20%20*%20master%20%60items%60%20array%20and%20a%20%60selected%60%20array%0A%20%20%20*%2Fvar%20ArraySelectorMixin%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20elementBase%3DPolymer.ElementMixin(superClass)%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ArraySelectorMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20ArraySelectorMixin%3Dfunction(_elementBase)%7B_inherits(ArraySelectorMixin%2C_elementBase)%3B_createClass(ArraySelectorMixin%2Cnull%2C%5B%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20An%20array%20containing%20items%20from%20which%20selection%20will%20be%20made.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fitems%3A%7Btype%3AArray%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60true%60%2C%20multiple%20items%20may%20be%20selected%20at%20once%20(in%20this%20case%2C%0A%20%20%20%20%20%20%20%20%20%20%20*%20%60selected%60%20is%20an%20array%20of%20currently%20selected%20items).%20%20When%20%60false%60%2C%0A%20%20%20%20%20%20%20%20%20%20%20*%20only%20one%20item%20may%20be%20selected%20at%20a%20time.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fmulti%3A%7Btype%3ABoolean%2Cvalue%3Afalse%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20true%2C%20this%20is%20an%20array%20that%20contains%20any%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20false%2C%20this%20is%20the%20currently%20selected%20item%2C%20or%20%60null%60%0A%20%20%20%20%20%20%20%20%20%20%20*%20if%20no%20item%20is%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40type%20%7B%3F(Object%7CArray%3C!Object%3E)%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fselected%3A%7Btype%3AObject%2Cnotify%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20false%2C%20this%20is%20the%20currently%20selected%20item%2C%20or%20%60null%60%0A%20%20%20%20%20%20%20%20%20%20%20*%20if%20no%20item%20is%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40type%20%7B%3FObject%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%2FselectedItem%3A%7Btype%3AObject%2Cnotify%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60true%60%2C%20calling%20%60select%60%20on%20an%20item%20that%20is%20already%20selected%0A%20%20%20%20%20%20%20%20%20%20%20*%20will%20deselect%20the%20item.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Ftoggle%3A%7Btype%3ABoolean%2Cvalue%3Afalse%7D%7D%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Breturn%5B'__updateSelection(multi%2C%20items.*)'%5D%3B%7D%7D%5D)%3Bfunction%20ArraySelectorMixin()%7B_classCallCheck(this%2CArraySelectorMixin)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(ArraySelectorMixin.__proto__%7C%7CObject.getPrototypeOf(ArraySelectorMixin)).call(this))%3B_this.__lastItems%3Dnull%3B_this.__lastMulti%3Dnull%3B_this.__selectedMap%3Dnull%3Breturn%20_this%3B%7D_createClass(ArraySelectorMixin%2C%5B%7Bkey%3A'__updateSelection'%2Cvalue%3Afunction%20__updateSelection(multi%2CitemsInfo)%7Bvar%20path%3DitemsInfo.path%3Bif(path%3D%3D'items')%7B%2F%2F%20Case%201%20-%20items%20array%20changed%2C%20so%20diff%20against%20previous%20array%20and%0A%2F%2F%20deselect%20any%20removed%20items%20and%20adjust%20selected%20indices%0Avar%20newItems%3DitemsInfo.base%7C%7C%5B%5D%3Bvar%20lastItems%3Dthis.__lastItems%3Bvar%20lastMulti%3Dthis.__lastMulti%3Bif(multi!%3D%3DlastMulti)%7Bthis.clearSelection()%3B%7Dif(lastItems)%7Bvar%20splices%3DPolymer.ArraySplice.calculateSplices(newItems%2ClastItems)%3Bthis.__applySplices(splices)%3B%7Dthis.__lastItems%3DnewItems%3Bthis.__lastMulti%3Dmulti%3B%7Delse%20if(itemsInfo.path%3D%3D'items.splices')%7B%2F%2F%20Case%202%20-%20got%20specific%20splice%20information%20describing%20the%20array%20mutation%3A%0A%2F%2F%20deselect%20any%20removed%20items%20and%20adjust%20selected%20indices%0Athis.__applySplices(itemsInfo.value.indexSplices)%3B%7Delse%7B%2F%2F%20Case%203%20-%20an%20array%20element%20was%20changed%2C%20so%20deselect%20the%20previous%0A%2F%2F%20item%20for%20that%20index%20if%20it%20was%20previously%20selected%0Avar%20part%3Dpath.slice('items.'.length)%3Bvar%20idx%3DparseInt(part%2C10)%3Bif(part.indexOf('.')%3C0%26%26part%3D%3Didx)%7Bthis.__deselectChangedIdx(idx)%3B%7D%7D%7D%7D%2C%7Bkey%3A'__applySplices'%2Cvalue%3Afunction%20__applySplices(splices)%7Bvar%20_this2%3Dthis%3Bvar%20selected%3Dthis.__selectedMap%3B%2F%2F%20Adjust%20selected%20indices%20and%20mark%20removals%0Avar%20_loop%3Dfunction%20_loop(i)%7Bvar%20s%3Dsplices%5Bi%5D%3Bselected.forEach(function(idx%2Citem)%7Bif(idx%3Cs.index)%7B%2F%2F%20no%20change%0A%7Delse%20if(idx%3E%3Ds.index%2Bs.removed.length)%7B%2F%2F%20adjust%20index%0Aselected.set(item%2Cidx%2Bs.addedCount-s.removed.length)%3B%7Delse%7B%2F%2F%20remove%20index%0Aselected.set(item%2C-1)%3B%7D%7D)%3Bfor(var%20j%3D0%3Bj%3Cs.addedCount%3Bj%2B%2B)%7Bvar%20idx%3Ds.index%2Bj%3Bif(selected.has(_this2.items%5Bidx%5D))%7Bselected.set(_this2.items%5Bidx%5D%2Cidx)%3B%7D%7D%7D%3Bfor(var%20i%3D0%3Bi%3Csplices.length%3Bi%2B%2B)%7B_loop(i)%3B%7D%2F%2F%20Update%20linked%20paths%0Athis.__updateLinks()%3B%2F%2F%20Remove%20selected%20items%20that%20were%20removed%20from%20the%20items%20array%0Avar%20sidx%3D0%3Bselected.forEach(function(idx%2Citem)%7Bif(idx%3C0)%7Bif(_this2.multi)%7B_this2.splice('selected'%2Csidx%2C1)%3B%7Delse%7B_this2.selected%3D_this2.selectedItem%3Dnull%3B%7Dselected.delete(item)%3B%7Delse%7Bsidx%2B%2B%3B%7D%7D)%3B%7D%7D%2C%7Bkey%3A'__updateLinks'%2Cvalue%3Afunction%20__updateLinks()%7Bvar%20_this3%3Dthis%3Bthis.__dataLinkedPaths%3D%7B%7D%3Bif(this.multi)%7Bvar%20sidx%3D0%3Bthis.__selectedMap.forEach(function(idx)%7Bif(idx%3E%3D0)%7B_this3.linkPaths('items.'%2Bidx%2C'selected.'%2Bsidx%2B%2B)%3B%7D%7D)%3B%7Delse%7Bthis.__selectedMap.forEach(function(idx)%7B_this3.linkPaths('selected'%2C'items.'%2Bidx)%3B_this3.linkPaths('selectedItem'%2C'items.'%2Bidx)%3B%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Clears%20the%20selection%20state.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'clearSelection'%2Cvalue%3Afunction%20clearSelection()%7B%2F%2F%20Unbind%20previous%20selection%0Athis.__dataLinkedPaths%3D%7B%7D%3B%2F%2F%20The%20selected%20map%20stores%203%20pieces%20of%20information%3A%0A%2F%2F%20key%3A%20items%20array%20object%0A%2F%2F%20value%3A%20items%20array%20index%0A%2F%2F%20order%3A%20selected%20array%20index%0Athis.__selectedMap%3Dnew%20Map()%3B%2F%2F%20Initialize%20selection%0Athis.selected%3Dthis.multi%3F%5B%5D%3Anull%3Bthis.selectedItem%3Dnull%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20item%20is%20currently%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20test%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20item%20is%20selected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isSelected'%2Cvalue%3Afunction%20isSelected(item)%7Breturn%20this.__selectedMap.has(item)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20item%20is%20currently%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20test%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20item%20is%20selected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isIndexSelected'%2Cvalue%3Afunction%20isIndexSelected(idx)%7Breturn%20this.isSelected(this.items%5Bidx%5D)%3B%7D%7D%2C%7Bkey%3A'__deselectChangedIdx'%2Cvalue%3Afunction%20__deselectChangedIdx(idx)%7Bvar%20_this4%3Dthis%3Bvar%20sidx%3Dthis.__selectedIndexForItemIndex(idx)%3Bif(sidx%3E%3D0)%7Bvar%20i%3D0%3Bthis.__selectedMap.forEach(function(idx%2Citem)%7Bif(sidx%3D%3Di%2B%2B)%7B_this4.deselect(item)%3B%7D%7D)%3B%7D%7D%7D%2C%7Bkey%3A'__selectedIndexForItemIndex'%2Cvalue%3Afunction%20__selectedIndexForItemIndex(idx)%7Bvar%20selected%3Dthis.__dataLinkedPaths%5B'items.'%2Bidx%5D%3Bif(selected)%7Breturn%20parseInt(selected.slice('selected.'.length)%2C10)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Deselects%20the%20given%20item%20if%20it%20is%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20deselect%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deselect'%2Cvalue%3Afunction%20deselect(item)%7Bvar%20idx%3Dthis.__selectedMap.get(item)%3Bif(idx%3E%3D0)%7Bthis.__selectedMap.delete(item)%3Bvar%20sidx%3Dvoid%200%3Bif(this.multi)%7Bsidx%3Dthis.__selectedIndexForItemIndex(idx)%3B%7Dthis.__updateLinks()%3Bif(this.multi)%7Bthis.splice('selected'%2Csidx%2C1)%3B%7Delse%7Bthis.selected%3Dthis.selectedItem%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Deselects%20the%20given%20index%20if%20it%20is%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20deselect%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deselectIndex'%2Cvalue%3Afunction%20deselectIndex(idx)%7Bthis.deselect(this.items%5Bidx%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Selects%20the%20given%20item.%20%20When%20%60toggle%60%20is%20true%2C%20this%20will%20automatically%0A%20%20%20%20%20%20%20*%20deselect%20the%20item%20if%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20select%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'select'%2Cvalue%3Afunction%20select(item)%7Bthis.selectIndex(this.items.indexOf(item))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Selects%20the%20given%20index.%20%20When%20%60toggle%60%20is%20true%2C%20this%20will%20automatically%0A%20%20%20%20%20%20%20*%20deselect%20the%20item%20if%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20select%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'selectIndex'%2Cvalue%3Afunction%20selectIndex(idx)%7Bvar%20item%3Dthis.items%5Bidx%5D%3Bif(!this.isSelected(item))%7Bif(!this.multi)%7Bthis.__selectedMap.clear()%3B%7Dthis.__selectedMap.set(item%2Cidx)%3Bthis.__updateLinks()%3Bif(this.multi)%7Bthis.push('selected'%2Citem)%3B%7Delse%7Bthis.selected%3Dthis.selectedItem%3Ditem%3B%7D%7Delse%20if(this.toggle)%7Bthis.deselectIndex(idx)%3B%7D%7D%7D%5D)%3Breturn%20ArraySelectorMixin%3B%7D(elementBase)%3Breturn%20ArraySelectorMixin%3B%7D)%3B%2F%2F%20export%20mixin%0APolymer.ArraySelectorMixin%3DArraySelectorMixin%3B%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40extends%20%7BPolymer.Element%7D%0A%20%20%20*%20%40implements%20%7BPolymer_ArraySelectorMixin%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20baseArraySelector%3DArraySelectorMixin(Polymer.Element)%3B%2F**%0A%20%20%20*%20Element%20implementing%20the%20%60Polymer.ArraySelector%60%20mixin%2C%20which%20records%0A%20%20%20*%20dynamic%20associations%20between%20item%20paths%20in%20a%20master%20%60items%60%20array%20and%20a%0A%20%20%20*%20%60selected%60%20array%20such%20that%20path%20changes%20to%20the%20master%20array%20(at%20the%20host)%0A%20%20%20*%20element%20or%20elsewhere%20via%20data-binding)%20are%20correctly%20propagated%20to%20items%0A%20%20%20*%20in%20the%20selected%20array%20and%20vice-versa.%0A%20%20%20*%0A%20%20%20*%20The%20%60items%60%20property%20accepts%20an%20array%20of%20user%20data%2C%20and%20via%20the%0A%20%20%20*%20%60select(item)%60%20and%20%60deselect(item)%60%20API%2C%20updates%20the%20%60selected%60%20property%0A%20%20%20*%20which%20may%20be%20bound%20to%20other%20parts%20of%20the%20application%2C%20and%20any%20changes%20to%0A%20%20%20*%20sub-fields%20of%20%60selected%60%20item(s)%20will%20be%20kept%20in%20sync%20with%20items%20in%20the%0A%20%20%20*%20%60items%60%20array.%20%20When%20%60multi%60%20is%20false%2C%20%60selected%60%20is%20a%20property%0A%20%20%20*%20representing%20the%20last%20selected%20item.%20%20When%20%60multi%60%20is%20true%2C%20%60selected%60%0A%20%20%20*%20is%20an%20array%20of%20multiply%20selected%20items.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-module%20id%3D%22employee-list%22%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3Ctemplate%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Employee%20list%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20id%3D%22employeeList%22%20items%3D%22%7B%7Bemployees%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20on-click%3D%22toggleSelection%22%3ESelect%3C%2Fbutton%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Carray-selector%20id%3D%22selector%22%20items%3D%22%7B%7Bemployees%7D%7D%22%20selected%3D%22%7B%7Bselected%7D%7D%22%20multi%20toggle%3E%3C%2Farray-selector%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Selected%20employees%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20items%3D%22%7B%7Bselected%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%0A%20%20%20*%20%3C%2Fdom-module%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*class%20EmployeeList%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20static%20get%20is()%20%7B%20return%20'employee-list'%3B%20%7D%0A%20%20%20*%20%20static%20get%20properties()%20%7B%0A%20%20%20*%20%20%20%20return%20%7B%0A%20%20%20*%20%20%20%20%20%20employees%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20value()%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Bob'%2C%20last%3A%20'Smith'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Sally'%2C%20last%3A%20'Johnson'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20...%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%7D%3B%0A%20%20%20*%20%20%7D%0A%20%20%20*%20%20toggleSelection(e)%20%7B%0A%20%20%20*%20%20%20%20let%20item%20%3D%20this.%24.employeeList.itemForElement(e.target)%3B%0A%20%20%20*%20%20%20%20this.%24.selector.select(item)%3B%0A%20%20%20*%20%20%7D%0A%20%20%20*%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20%7BbaseArraySelector%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.ArraySelectorMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20links%20paths%20between%20an%20input%20%60items%60%20array%20and%0A%20%20%20*%20%20%20an%20output%20%60selected%60%20item%20or%20array%20based%20on%20calls%20to%20its%20selection%20API.%0A%20%20%20*%2Fvar%20ArraySelector%3Dfunction(_baseArraySelector)%7B_inherits(ArraySelector%2C_baseArraySelector)%3Bfunction%20ArraySelector()%7B_classCallCheck(this%2CArraySelector)%3Breturn%20_possibleConstructorReturn(this%2C(ArraySelector.__proto__%7C%7CObject.getPrototypeOf(ArraySelector)).apply(this%2Carguments))%3B%7D_createClass(ArraySelector%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'array-selector'%3B%7D%7D%5D)%3Breturn%20ArraySelector%3B%7D(baseArraySelector)%3BcustomElements.define(ArraySelector.is%2CArraySelector)%3B%2F**%20%40const%20*%2FPolymer.ArraySelector%3DArraySelector%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Farray-selector.html.js%0A",
            "resourceBytes": 13519,
            "encodedBytes": 0,
            "unusedBytes": 4656
          },
          {
            "name": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20mutablePropertyChange%3Dvoid%200%3B%2F**%20%40suppress%20%7BmissingProperties%7D%20*%2F(function()%7BmutablePropertyChange%3DPolymer.MutableData._mutablePropertyChange%3B%7D)()%3B%2F**%0A%20%20%20*%20Legacy%20element%20behavior%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%20arrays%2C%0A%20%20%20*%20(always%20consider%20them%20to%20be%20%22dirty%22)%20for%20use%20on%20legacy%20API%20Polymer%20elements.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20cause%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20apply%20this%20behavior%20or%20enable%20the%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20make%20the%20dirty%20check%20strategy%20configurable%2C%20see%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20as%20opposed%20to%20using%20strict%20dirty%20checking%20with%20immutable%0A%20%20%20*%20patterns%20or%20Polymer's%20path%20notification%20API.%0A%20%20%20*%0A%20%20%20*%20%40polymerBehavior%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Behavior%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%0A%20%20%20*%20%20%20arrays%0A%20%20%20*%2FPolymer.MutableDataBehavior%3D%7B%2F**%0A%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%0A%20%20%20%20%20*%20cache%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F_shouldPropertyChange%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Ctrue)%3B%7D%7D%3B%2F**%0A%20%20%20*%20Legacy%20element%20behavior%20to%20add%20the%20optional%20ability%20to%20skip%20strict%0A%20%20%20*%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20*%20%22dirty%22)%20by%20setting%20a%20%60mutable-data%60%20attribute%20on%20an%20element%20instance.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20allow%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20enable%20this%20behavior%20or%20apply%20the%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20While%20this%20behavior%20adds%20the%20ability%20to%20forgo%20Object%2FArray%20dirty%20checking%2C%0A%20%20%20*%20the%20%60mutableData%60%20flag%20defaults%20to%20false%20and%20must%20be%20set%20on%20the%20instance.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20by%20relying%20on%20%60mutableData%3A%20true%60%20as%20opposed%20to%20using%0A%20%20%20*%20strict%20dirty%20checking%20with%20immutable%20patterns%20or%20Polymer's%20path%20notification%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40polymerBehavior%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Behavior%20to%20optionally%20skip%20strict%20dirty-checking%20for%20objects%20and%0A%20%20%20*%20%20%20arrays%0A%20%20%20*%2FPolymer.OptionalMutableDataBehavior%3D%7Bproperties%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Instance-level%20flag%20for%20configuring%20the%20dirty-checking%20strategy%0A%20%20%20%20%20%20%20*%20for%20this%20element.%20%20When%20true%2C%20Objects%20and%20Arrays%20will%20skip%20dirty%0A%20%20%20%20%20%20%20*%20checking%2C%20otherwise%20strict%20equality%20checking%20will%20be%20used.%0A%20%20%20%20%20%20%20*%2FmutableData%3ABoolean%7D%2C%2F**%0A%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20skip%20strict%20equality%20checking%0A%20%20%20%20%20*%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%20cache%0A%20%20%20%20%20*%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F_shouldPropertyChange%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Cthis.mutableData)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fmutable-data-behavior.html.js%0A",
            "resourceBytes": 6798,
            "encodedBytes": 0,
            "unusedBytes": 234
          },
          {
            "name": "data:text/javascript;charset=utf-8,%2F%2F%20bc%0APolymer.Base%3DPolymer.LegacyElementMixin(HTMLElement).prototype%3B%2F%2F%20NOTE%3A%20this%20is%20here%20for%20modulizer%20to%20export%20%60html%60%20for%20the%20module%20version%20of%20this%20file%0APolymer.html%3DPolymer.html%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Fpolymer.html.js%0A",
            "resourceBytes": 314,
            "encodedBytes": 0,
            "unusedBytes": 0
          }
        ]
      }
    },
    "accesskeys": {
      "id": "accesskeys",
      "title": "`[accesskey]` values are unique",
      "description": "Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more about access keys](https://dequeuniversity.com/rules/axe/4.11/accesskeys).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-allowed-attr": {
      "id": "aria-allowed-attr",
      "title": "`[aria-*]` attributes match their roles",
      "description": "Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn how to match ARIA attributes to their roles](https://dequeuniversity.com/rules/axe/4.11/aria-allowed-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-allowed-role": {
      "id": "aria-allowed-role",
      "title": "Uses ARIA roles only on compatible elements",
      "description": "Many HTML elements can only be assigned certain ARIA roles. Using ARIA roles where they are not allowed can interfere with the accessibility of the web page. [Learn more about ARIA roles](https://dequeuniversity.com/rules/axe/4.11/aria-allowed-role).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-command-name": {
      "id": "aria-command-name",
      "title": "`button`, `link`, and `menuitem` elements have accessible names",
      "description": "When an element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to make command elements more accessible](https://dequeuniversity.com/rules/axe/4.11/aria-command-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-conditional-attr": {
      "id": "aria-conditional-attr",
      "title": "ARIA attributes are used as specified for the element's role",
      "description": "Some ARIA attributes are only allowed on an element under certain conditions. [Learn more about conditional ARIA attributes](https://dequeuniversity.com/rules/axe/4.11/aria-conditional-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-deprecated-role": {
      "id": "aria-deprecated-role",
      "title": "Deprecated ARIA roles were not used",
      "description": "Deprecated ARIA roles may not be processed correctly by assistive technology. [Learn more about deprecated ARIA roles](https://dequeuniversity.com/rules/axe/4.11/aria-deprecated-role).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-dialog-name": {
      "id": "aria-dialog-name",
      "title": "Elements with `role=\"dialog\"` or `role=\"alertdialog\"` have accessible names.",
      "description": "ARIA dialog elements without accessible names may prevent screen readers users from discerning the purpose of these elements. [Learn how to make ARIA dialog elements more accessible](https://dequeuniversity.com/rules/axe/4.11/aria-dialog-name).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-hidden-body": {
      "id": "aria-hidden-body",
      "title": "`[aria-hidden=\"true\"]` is not present on the document `<body>`",
      "description": "Assistive technologies, like screen readers, work inconsistently when `aria-hidden=\"true\"` is set on the document `<body>`. [Learn how `aria-hidden` affects the document body](https://dequeuniversity.com/rules/axe/4.11/aria-hidden-body).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-hidden-focus": {
      "id": "aria-hidden-focus",
      "title": "`[aria-hidden=\"true\"]` elements do not contain focusable descendents",
      "description": "Focusable descendents within an `[aria-hidden=\"true\"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. [Learn how `aria-hidden` affects focusable elements](https://dequeuniversity.com/rules/axe/4.11/aria-hidden-focus).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-input-field-name": {
      "id": "aria-input-field-name",
      "title": "ARIA input fields have accessible names",
      "description": "When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about input field labels](https://dequeuniversity.com/rules/axe/4.11/aria-input-field-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-meter-name": {
      "id": "aria-meter-name",
      "title": "ARIA `meter` elements have accessible names",
      "description": "When a meter element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to name `meter` elements](https://dequeuniversity.com/rules/axe/4.11/aria-meter-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-progressbar-name": {
      "id": "aria-progressbar-name",
      "title": "ARIA `progressbar` elements have accessible names",
      "description": "When a `progressbar` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to label `progressbar` elements](https://dequeuniversity.com/rules/axe/4.11/aria-progressbar-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-prohibited-attr": {
      "id": "aria-prohibited-attr",
      "title": "Elements use only permitted ARIA attributes",
      "description": "Using ARIA attributes in roles where they are prohibited can mean that important information is not communicated to users of assistive technologies. [Learn more about prohibited ARIA roles](https://dequeuniversity.com/rules/axe/4.11/aria-prohibited-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-required-attr": {
      "id": "aria-required-attr",
      "title": "`[role]`s have all required `[aria-*]` attributes",
      "description": "Some ARIA roles have required attributes that describe the state of the element to screen readers. [Learn more about roles and required attributes](https://dequeuniversity.com/rules/axe/4.11/aria-required-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-required-children": {
      "id": "aria-required-children",
      "title": "Elements with an ARIA `[role]` that require children to contain a specific `[role]` have all required children.",
      "description": "Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. [Learn more about roles and required children elements](https://dequeuniversity.com/rules/axe/4.11/aria-required-children).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-required-parent": {
      "id": "aria-required-parent",
      "title": "`[role]`s are contained by their required parent element",
      "description": "Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. [Learn more about ARIA roles and required parent element](https://dequeuniversity.com/rules/axe/4.11/aria-required-parent).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-roles": {
      "id": "aria-roles",
      "title": "`[role]` values are valid",
      "description": "ARIA roles must have valid values in order to perform their intended accessibility functions. [Learn more about valid ARIA roles](https://dequeuniversity.com/rules/axe/4.11/aria-roles).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-text": {
      "id": "aria-text",
      "title": "Elements with the `role=text` attribute do not have focusable descendents.",
      "description": "Adding `role=text` around a text node split by markup enables VoiceOver to treat it as one phrase, but the element's focusable descendents will not be announced. [Learn more about the `role=text` attribute](https://dequeuniversity.com/rules/axe/4.11/aria-text).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-toggle-field-name": {
      "id": "aria-toggle-field-name",
      "title": "ARIA toggle fields have accessible names",
      "description": "When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about toggle fields](https://dequeuniversity.com/rules/axe/4.11/aria-toggle-field-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-tooltip-name": {
      "id": "aria-tooltip-name",
      "title": "ARIA `tooltip` elements have accessible names",
      "description": "When a tooltip element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn how to name `tooltip` elements](https://dequeuniversity.com/rules/axe/4.11/aria-tooltip-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-treeitem-name": {
      "id": "aria-treeitem-name",
      "title": "ARIA `treeitem` elements have accessible names",
      "description": "When a `treeitem` element doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more about labeling `treeitem` elements](https://dequeuniversity.com/rules/axe/4.11/aria-treeitem-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "aria-valid-attr-value": {
      "id": "aria-valid-attr-value",
      "title": "`[aria-*]` attributes have valid values",
      "description": "Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. [Learn more about valid values for ARIA attributes](https://dequeuniversity.com/rules/axe/4.11/aria-valid-attr-value).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "aria-valid-attr": {
      "id": "aria-valid-attr",
      "title": "`[aria-*]` attributes are valid and not misspelled",
      "description": "Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. [Learn more about valid ARIA attributes](https://dequeuniversity.com/rules/axe/4.11/aria-valid-attr).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "button-name": {
      "id": "button-name",
      "title": "Buttons have an accessible name",
      "description": "When a button doesn't have an accessible name, screen readers announce it as \"button\", making it unusable for users who rely on screen readers. [Learn how to make buttons more accessible](https://dequeuniversity.com/rules/axe/4.11/button-name).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "bypass": {
      "id": "bypass",
      "title": "The page contains a heading, skip link, or landmark region",
      "description": "Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. [Learn more about bypass blocks](https://dequeuniversity.com/rules/axe/4.11/bypass).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "color-contrast": {
      "id": "color-contrast",
      "title": "Background and foreground colors do not have a sufficient contrast ratio.",
      "description": "Low-contrast text is difficult or impossible for many users to read. [Learn how to provide sufficient color contrast](https://dequeuniversity.com/rules/axe/4.11/color-contrast).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-0-SPAN",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,0,CTA-GENERIC-TEXT,0,SPAN",
              "selector": "div.content-well > div#post-content > cta-generic-text.feedback > span.emphasis",
              "boundingRect": {
                "top": 2484,
                "bottom": 2510,
                "left": 70,
                "right": 281,
                "width": 211,
                "height": 26
              },
              "snippet": "<span class=\"emphasis\">",
              "nodeLabel": "Share your feedback",
              "explanation": "Fix any of the following:\n  Element has insufficient color contrast of 2.94 (foreground color: #009bff, background color: #ffffff, font size: 15.6pt (20.8364px), font weight: bold). Expected contrast ratio of 3:1"
            },
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "relatedNode": {
                    "type": "node",
                    "lhId": "1-1-DIV",
                    "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV",
                    "selector": "body.partner-placements-inactive > section.page-main-content-container > div.primary > div.content-well",
                    "boundingRect": {
                      "top": 56,
                      "bottom": 3983,
                      "left": 0,
                      "right": 412,
                      "width": 412,
                      "height": 3927
                    },
                    "snippet": "<div class=\"content-well\">",
                    "nodeLabel": "Iowa's speed limit would rise under a bill heading to Gov. Reynolds\nPolitics\nWi…"
                  }
                }
              ]
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "serious",
          "tags": [
            "cat.color",
            "wcag2aa",
            "wcag143",
            "TTv5",
            "TT13.c",
            "EN-301-549",
            "EN-9.1.4.3",
            "ACT",
            "RGAAv4",
            "RGAA-3.2.1"
          ]
        }
      }
    },
    "definition-list": {
      "id": "definition-list",
      "title": "`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.",
      "description": "When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. [Learn how to structure definition lists correctly](https://dequeuniversity.com/rules/axe/4.11/definition-list).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "dlitem": {
      "id": "dlitem",
      "title": "Definition list items are wrapped in `<dl>` elements",
      "description": "Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them. [Learn how to structure definition lists correctly](https://dequeuniversity.com/rules/axe/4.11/dlitem).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "document-title": {
      "id": "document-title",
      "title": "Document has a `<title>` element",
      "description": "The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. [Learn more about document titles](https://dequeuniversity.com/rules/axe/4.11/document-title).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "duplicate-id-aria": {
      "id": "duplicate-id-aria",
      "title": "ARIA IDs are unique",
      "description": "The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies. [Learn how to fix duplicate ARIA IDs](https://dequeuniversity.com/rules/axe/4.11/duplicate-id-aria).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "empty-heading": {
      "id": "empty-heading",
      "title": "All heading elements contain content.",
      "description": "A heading with no content or inaccessible text prevent screen reader users from accessing information on the page's structure. [Learn more about headings](https://dequeuniversity.com/rules/axe/4.11/empty-heading).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "form-field-multiple-labels": {
      "id": "form-field-multiple-labels",
      "title": "No form fields have multiple labels",
      "description": "Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels. [Learn how to use form labels](https://dequeuniversity.com/rules/axe/4.11/form-field-multiple-labels).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "frame-title": {
      "id": "frame-title",
      "title": "`<frame>` or `<iframe>` elements have a title",
      "description": "Screen reader users rely on frame titles to describe the contents of frames. [Learn more about frame titles](https://dequeuniversity.com/rules/axe/4.11/frame-title).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "heading-order": {
      "id": "heading-order",
      "title": "Heading elements are not in a sequentially-descending order",
      "description": "Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. [Learn more about heading order](https://dequeuniversity.com/rules/axe/4.11/heading-order).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-2-H5",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,1,DIV,0,UI-LABEL-BUCKET,a,#document-fragment,1,DIV,0,A,0,H5",
              "selector": "div#container > a.has-padding > h5.label-news",
              "boundingRect": {
                "top": 2639,
                "bottom": 2659,
                "left": 0,
                "right": 193,
                "width": 193,
                "height": 20
              },
              "snippet": "<h5 class=\"label-news\">",
              "nodeLabel": "Most Recent Videos",
              "explanation": "Fix any of the following:\n  Heading order invalid"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "moderate",
          "tags": [
            "cat.semantics",
            "best-practice"
          ]
        }
      }
    },
    "html-has-lang": {
      "id": "html-has-lang",
      "title": "`<html>` element has a `[lang]` attribute",
      "description": "If a page doesn't specify a `lang` attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. [Learn more about the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/html-has-lang).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "html-lang-valid": {
      "id": "html-lang-valid",
      "title": "`<html>` element has a valid value for its `[lang]` attribute",
      "description": "Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) helps screen readers announce text properly. [Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/html-lang-valid).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "html-xml-lang-mismatch": {
      "id": "html-xml-lang-mismatch",
      "title": "`<html>` element has an `[xml:lang]` attribute with the same base language as the `[lang]` attribute.",
      "description": "If the webpage does not specify a consistent language, then the screen reader might not announce the page's text correctly. [Learn more about the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/html-xml-lang-mismatch).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "identical-links-same-purpose": {
      "id": "identical-links-same-purpose",
      "title": "Identical links have the same purpose.",
      "description": "Links with the same destination should have the same description, to help users understand the link's purpose and decide whether to follow it. [Learn more about identical links](https://dequeuniversity.com/rules/axe/4.11/identical-links-same-purpose).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "image-alt": {
      "id": "image-alt",
      "title": "Image elements do not have `[alt]` attributes",
      "description": "Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.11/image-alt).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-3-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3006,
                "bottom": 3114,
                "left": 8,
                "right": 201,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-4-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3006,
                "bottom": 3114,
                "left": 211,
                "right": 404,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-5-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,8,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3006,
                "bottom": 3114,
                "left": 414,
                "right": 607,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-6-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,10,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3006,
                "bottom": 3114,
                "left": 617,
                "right": 810,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-7-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,12,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3006,
                "bottom": 3114,
                "left": 820,
                "right": 1013,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2024/08/28/PIOC/749…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-8-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,14,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3006,
                "bottom": 3114,
                "left": 1023,
                "right": 1216,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/videos/wochit/thumbnails/89663503007…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-9-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,16,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3006,
                "bottom": 3114,
                "left": 1226,
                "right": 1419,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/02/11/NATR/886…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-10-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,18,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3006,
                "bottom": 3114,
                "left": 1429,
                "right": 1622,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/02/11/NATR/886…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-11-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,20,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3006,
                "bottom": 3129,
                "left": 1632,
                "right": 1825,
                "width": 193,
                "height": 123
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/11/29/PDEM/875…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-12-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,3,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,4,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3694,
                "bottom": 3803,
                "left": 8,
                "right": 201,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PIOC/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-13-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,3,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3694,
                "bottom": 3803,
                "left": 211,
                "right": 404,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PDEM/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-14-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,3,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,8,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3694,
                "bottom": 3803,
                "left": 414,
                "right": 607,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/20/PDEM/897…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-15-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,3,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,10,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3694,
                "bottom": 3803,
                "left": 617,
                "right": 810,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/15/PDEM/896…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-16-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,3,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,12,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3694,
                "bottom": 3803,
                "left": 820,
                "right": 1013,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/presto/2020/04/27/PDEM/04590922-d504-4fbc-87e8…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-17-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,3,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,14,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3694,
                "bottom": 3803,
                "left": 1023,
                "right": 1216,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/19/PDEM/896…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-18-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,3,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,16,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3694,
                "bottom": 3803,
                "left": 1226,
                "right": 1419,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/presto/2019/08/01/PDEM/476d38a2-1d6a-4769-8327…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-19-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,3,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,18,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3694,
                "bottom": 3803,
                "left": 1429,
                "right": 1622,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/19/PDEM/896…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-20-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,3,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,20,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3694,
                "bottom": 3803,
                "left": 1632,
                "right": 1825,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/18/PDEM/896…\">",
              "nodeLabel": "a.container-link > div.container > img",
              "explanation": "Fix any of the following:\n  Element does not have an alt attribute\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute\n  Element's default semantics were not overridden with role=\"none\" or role=\"presentation\""
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "critical",
          "tags": [
            "cat.text-alternatives",
            "wcag2a",
            "wcag111",
            "section508",
            "section508.22.a",
            "TTv5",
            "TT7.a",
            "TT7.b",
            "EN-301-549",
            "EN-9.1.1.1",
            "ACT",
            "RGAAv4",
            "RGAA-1.1.1"
          ]
        }
      }
    },
    "image-redundant-alt": {
      "id": "image-redundant-alt",
      "title": "Image elements do not have `[alt]` attributes that are redundant text.",
      "description": "Informative elements should aim for short, descriptive alternative text. Alternative text that is exactly the same as the text adjacent to the link or image is potentially confusing for screen reader users, because the text will be read twice. [Learn more about the `alt` attribute](https://dequeuniversity.com/rules/axe/4.11/image-redundant-alt).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "input-button-name": {
      "id": "input-button-name",
      "title": "Input buttons have discernible text.",
      "description": "Adding discernable and accessible text to input buttons may help screen reader users understand the purpose of the input button. [Learn more about input buttons](https://dequeuniversity.com/rules/axe/4.11/input-button-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "input-image-alt": {
      "id": "input-image-alt",
      "title": "`<input type=\"image\">` elements have `[alt]` text",
      "description": "When an image is being used as an `<input>` button, providing alternative text can help screen reader users understand the purpose of the button. [Learn about input image alt text](https://dequeuniversity.com/rules/axe/4.11/input-image-alt).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "label-content-name-mismatch": {
      "id": "label-content-name-mismatch",
      "title": "Elements with visible text labels do not have matching accessible names.",
      "description": "Visible text labels that do not match the accessible name can result in a confusing experience for screen reader users. [Learn more about accessible names](https://dequeuniversity.com/rules/axe/4.11/label-content-name-mismatch).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-21-A",
              "path": "1,HTML,1,BODY,12,DIV,1,DIV,0,DIV,0,DIV,0,DIV,0,DIV,3,DIV,3,A",
              "selector": "div#onetrust-group-container > div#onetrust-policy > div#onetrust-policy-text > a.ot-cookie-policy-link",
              "boundingRect": {
                "top": 346,
                "bottom": 399,
                "left": 32,
                "right": 351,
                "width": 318,
                "height": 53
              },
              "snippet": "<a class=\"ot-cookie-policy-link\" href=\"/privacy\" aria-label=\"More information about your privacy, opens in a new tab\" rel=\"noopener noreferrer\" target=\"_blank\">",
              "nodeLabel": "For more information about how we use your data visit our Privacy Policy.",
              "explanation": "Fix any of the following:\n  Text inside the element is not included in the accessible name"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "serious",
          "tags": [
            "cat.semantics",
            "wcag21a",
            "wcag253",
            "EN-301-549",
            "EN-9.2.5.3",
            "RGAAv4",
            "RGAA-6.1.5",
            "experimental"
          ]
        }
      }
    },
    "label": {
      "id": "label",
      "title": "Form elements have associated labels",
      "description": "Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more about form element labels](https://dequeuniversity.com/rules/axe/4.11/label).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "landmark-one-main": {
      "id": "landmark-one-main",
      "title": "Document has a main landmark.",
      "description": "One main landmark helps screen reader users navigate a web page. [Learn more about landmarks](https://dequeuniversity.com/rules/axe/4.11/landmark-one-main).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "link-name": {
      "id": "link-name",
      "title": "Links do not have a discernible name",
      "description": "Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. [Learn how to make links accessible](https://dequeuniversity.com/rules/axe/4.11/link-name).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-22-A",
              "path": "1,HTML,1,BODY,6,FOOTER,1,DIV,1,DIV,1,DIV,0,A",
              "selector": "div#footer > div#footerContainer > div#footerButtons > a#Facebook",
              "boundingRect": {
                "top": 4155,
                "bottom": 4183,
                "left": 26,
                "right": 75,
                "width": 49,
                "height": 28
              },
              "snippet": "<a id=\"Facebook\" href=\"https://www.facebook.com/DesMoinesRegister\" on-tap=\"trackClick(this)\">",
              "nodeLabel": "div#footer > div#footerContainer > div#footerButtons > a#Facebook",
              "explanation": "Fix all of the following:\n  Element is in tab order and does not have accessible text\n\nFix any of the following:\n  Element does not have text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute"
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-23-A",
              "path": "1,HTML,1,BODY,6,FOOTER,1,DIV,1,DIV,1,DIV,1,A",
              "selector": "div#footer > div#footerContainer > div#footerButtons > a#Twitter",
              "boundingRect": {
                "top": 4155,
                "bottom": 4183,
                "left": 75,
                "right": 124,
                "width": 49,
                "height": 28
              },
              "snippet": "<a id=\"Twitter\" href=\"https://twitter.com/DMRegister\" on-tap=\"trackClick(this)\">",
              "nodeLabel": "div#footer > div#footerContainer > div#footerButtons > a#Twitter",
              "explanation": "Fix all of the following:\n  Element is in tab order and does not have accessible text\n\nFix any of the following:\n  Element does not have text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute"
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "1-24-A",
              "path": "1,HTML,1,BODY,6,FOOTER,1,DIV,1,DIV,1,DIV,3,A",
              "selector": "div#footer > div#footerContainer > div#footerButtons > a#Pinterest",
              "boundingRect": {
                "top": 4155,
                "bottom": 4183,
                "left": 173,
                "right": 197,
                "width": 24,
                "height": 28
              },
              "snippet": "<a id=\"Pinterest\" href=\"http://www.pinterest.com/dmregister/\" on-tap=\"trackClick(this)\">",
              "nodeLabel": "div#footer > div#footerContainer > div#footerButtons > a#Pinterest",
              "explanation": "Fix all of the following:\n  Element is in tab order and does not have accessible text\n\nFix any of the following:\n  Element does not have text that is visible to screen readers\n  aria-label attribute does not exist or is empty\n  aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n  Element has no title attribute"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "serious",
          "tags": [
            "cat.name-role-value",
            "wcag2a",
            "wcag244",
            "wcag412",
            "section508",
            "section508.22.a",
            "TTv5",
            "TT6.a",
            "EN-301-549",
            "EN-9.2.4.4",
            "EN-9.4.1.2",
            "ACT",
            "RGAAv4",
            "RGAA-6.2.1"
          ]
        }
      }
    },
    "link-in-text-block": {
      "id": "link-in-text-block",
      "title": "Links are distinguishable without relying on color.",
      "description": "Low-contrast text is difficult or impossible for many users to read. Link text that is discernible improves the experience for users with low vision. [Learn how to make links distinguishable](https://dequeuniversity.com/rules/axe/4.11/link-in-text-block).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "list": {
      "id": "list",
      "title": "Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).",
      "description": "Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. [Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.11/list).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "listitem": {
      "id": "listitem",
      "title": "List items (`<li>`) are contained within `<ul>`, `<ol>` or `<menu>` parent elements",
      "description": "Screen readers require list items (`<li>`) to be contained within a parent `<ul>`, `<ol>` or `<menu>` to be announced properly. [Learn more about proper list structure](https://dequeuniversity.com/rules/axe/4.11/listitem).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "meta-refresh": {
      "id": "meta-refresh",
      "title": "The document does not use `<meta http-equiv=\"refresh\">`",
      "description": "Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. [Learn more about the refresh meta tag](https://dequeuniversity.com/rules/axe/4.11/meta-refresh).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "meta-viewport": {
      "id": "meta-viewport",
      "title": "`[user-scalable=\"no\"]` is not used in the `<meta name=\"viewport\">` element and the `[maximum-scale]` attribute is not less than 5.",
      "description": "Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. [Learn more about the viewport meta tag](https://dequeuniversity.com/rules/axe/4.11/meta-viewport).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "object-alt": {
      "id": "object-alt",
      "title": "`<object>` elements have alternate text",
      "description": "Screen readers cannot translate non-text content. Adding alternate text to `<object>` elements helps screen readers convey meaning to users. [Learn more about alt text for `object` elements](https://dequeuniversity.com/rules/axe/4.11/object-alt).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "select-name": {
      "id": "select-name",
      "title": "Select elements have associated label elements.",
      "description": "Form elements without effective labels can create frustrating experiences for screen reader users. [Learn more about the `select` element](https://dequeuniversity.com/rules/axe/4.11/select-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "skip-link": {
      "id": "skip-link",
      "title": "Skip links are not focusable.",
      "description": "Including a skip link can help users skip to the main content to save time. [Learn more about skip links](https://dequeuniversity.com/rules/axe/4.11/skip-link).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "1-25-A",
              "path": "1,HTML,1,BODY,1,A",
              "selector": "body.partner-placements-inactive > a#skipToMain",
              "boundingRect": {
                "top": 10,
                "bottom": 30,
                "left": -999,
                "right": -843,
                "width": 156,
                "height": 20
              },
              "snippet": "<a id=\"skipToMain\" href=\"#mainContentSection\">",
              "nodeLabel": "Skip to main content",
              "explanation": "Fix any of the following:\n  No skip link target"
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "impact": "moderate",
          "tags": [
            "cat.keyboard",
            "best-practice",
            "RGAAv4",
            "RGAA-12.7.1"
          ]
        }
      }
    },
    "tabindex": {
      "id": "tabindex",
      "title": "No element has a `[tabindex]` value greater than 0",
      "description": "A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more about the `tabindex` attribute](https://dequeuniversity.com/rules/axe/4.11/tabindex).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "table-duplicate-name": {
      "id": "table-duplicate-name",
      "title": "Tables have different content in the summary attribute and `<caption>`.",
      "description": "The summary attribute should describe the table structure, while `<caption>` should have the onscreen title. Accurate table mark-up helps users of screen readers. [Learn more about summary and caption](https://dequeuniversity.com/rules/axe/4.11/table-duplicate-name).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "table-fake-caption": {
      "id": "table-fake-caption",
      "title": "Tables use `<caption>` instead of cells with the `[colspan]` attribute to indicate a caption.",
      "description": "Screen readers have features to make navigating tables easier. Ensuring that tables use the actual caption element instead of cells with the `[colspan]` attribute may improve the experience for screen reader users. [Learn more about captions](https://dequeuniversity.com/rules/axe/4.11/table-fake-caption).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "target-size": {
      "id": "target-size",
      "title": "Touch targets have sufficient size and spacing.",
      "description": "Touch targets with sufficient size and spacing help users who may have difficulty targeting small controls to activate the targets. [Learn more about touch targets](https://dequeuniversity.com/rules/axe/4.11/target-size).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "subItemsHeading": {
              "key": "relatedNode",
              "valueType": "node"
            },
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "td-has-header": {
      "id": "td-has-header",
      "title": "`<td>` elements in a large `<table>` have one or more table headers.",
      "description": "Screen readers have features to make navigating tables easier. Ensuring that `<td>` elements in a large table (3 or more cells in width and height) have an associated table header may improve the experience for screen reader users. [Learn more about table headers](https://dequeuniversity.com/rules/axe/4.11/td-has-header).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "td-headers-attr": {
      "id": "td-headers-attr",
      "title": "Cells in a `<table>` element that use the `[headers]` attribute refer to table cells within the same table.",
      "description": "Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. [Learn more about the `headers` attribute](https://dequeuniversity.com/rules/axe/4.11/td-headers-attr).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "th-has-data-cells": {
      "id": "th-has-data-cells",
      "title": "`<th>` elements and elements with `[role=\"columnheader\"/\"rowheader\"]` have data cells they describe.",
      "description": "Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. [Learn more about table headers](https://dequeuniversity.com/rules/axe/4.11/th-has-data-cells).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "valid-lang": {
      "id": "valid-lang",
      "title": "`[lang]` attributes have a valid value",
      "description": "Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) on elements helps ensure that text is pronounced correctly by a screen reader. [Learn how to use the `lang` attribute](https://dequeuniversity.com/rules/axe/4.11/valid-lang).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "video-caption": {
      "id": "video-caption",
      "title": "`<video>` elements contain a `<track>` element with `[kind=\"captions\"]`",
      "description": "When a video provides a caption it is easier for deaf and hearing impaired users to access its information. [Learn more about video captions](https://dequeuniversity.com/rules/axe/4.11/video-caption).",
      "score": null,
      "scoreDisplayMode": "notApplicable"
    },
    "custom-controls-labels": {
      "id": "custom-controls-labels",
      "title": "Custom controls have associated labels",
      "description": "Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. [Learn more about custom controls and labels](https://developer.chrome.com/docs/lighthouse/accessibility/custom-controls-labels/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "custom-controls-roles": {
      "id": "custom-controls-roles",
      "title": "Custom controls have ARIA roles",
      "description": "Custom interactive controls have appropriate ARIA roles. [Learn how to add roles to custom controls](https://developer.chrome.com/docs/lighthouse/accessibility/custom-control-roles/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "focus-traps": {
      "id": "focus-traps",
      "title": "User focus is not accidentally trapped in a region",
      "description": "A user can tab into and out of any control or region without accidentally trapping their focus. [Learn how to avoid focus traps](https://developer.chrome.com/docs/lighthouse/accessibility/focus-traps/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "focusable-controls": {
      "id": "focusable-controls",
      "title": "Interactive controls are keyboard focusable",
      "description": "Custom interactive controls are keyboard focusable and display a focus indicator. [Learn how to make custom controls focusable](https://developer.chrome.com/docs/lighthouse/accessibility/focusable-controls/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "interactive-element-affordance": {
      "id": "interactive-element-affordance",
      "title": "Interactive elements indicate their purpose and state",
      "description": "Interactive elements, such as links and buttons, should indicate their state and be distinguishable from non-interactive elements. [Learn how to decorate interactive elements with affordance hints](https://developer.chrome.com/docs/lighthouse/accessibility/interactive-element-affordance/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "logical-tab-order": {
      "id": "logical-tab-order",
      "title": "The page has a logical tab order",
      "description": "Tabbing through the page follows the visual layout. Users cannot focus elements that are offscreen. [Learn more about logical tab ordering](https://developer.chrome.com/docs/lighthouse/accessibility/logical-tab-order/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "managed-focus": {
      "id": "managed-focus",
      "title": "The user's focus is directed to new content added to the page",
      "description": "If new content, such as a dialog, is added to the page, the user's focus is directed to it. [Learn how to direct focus to new content](https://developer.chrome.com/docs/lighthouse/accessibility/managed-focus/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "offscreen-content-hidden": {
      "id": "offscreen-content-hidden",
      "title": "Offscreen content is hidden from assistive technology",
      "description": "Offscreen content is hidden with display: none or aria-hidden=true. [Learn how to properly hide offscreen content](https://developer.chrome.com/docs/lighthouse/accessibility/offscreen-content-hidden/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "use-landmarks": {
      "id": "use-landmarks",
      "title": "HTML5 landmark elements are used to improve navigation",
      "description": "Landmark elements (`<main>`, `<nav>`, etc.) are used to improve the keyboard navigation of the page for assistive technology. [Learn more about landmark elements](https://developer.chrome.com/docs/lighthouse/accessibility/use-landmarks/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "visual-order-follows-dom": {
      "id": "visual-order-follows-dom",
      "title": "Visual order on the page follows DOM order",
      "description": "DOM order matches the visual order, improving navigation for assistive technology. [Learn more about DOM and visual ordering](https://developer.chrome.com/docs/lighthouse/accessibility/visual-order-follows-dom/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "total-byte-weight": {
      "id": "total-byte-weight",
      "title": "Avoid enormous network payloads",
      "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn how to reduce payload sizes](https://developer.chrome.com/docs/lighthouse/performance/total-byte-weight/).",
      "score": 0.5,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 3039061,
      "numericUnit": "byte",
      "displayValue": "Total size was 2,968 KiB",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Transfer Size"
          }
        ],
        "items": [
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/11/29/PDEM/87526917007-usatsi-27702164.jpg?crop=4953,2787,x0,y184&width=384&quality=50&crop=16%3A9",
            "totalBytes": 1573365
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89736913007-screenshot-20260422-132701.png?crop=636,638,x0,y111&quality=50&width=270",
            "totalBytes": 147689
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otBannerSdk.js",
            "totalBytes": 131455
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89734206007-caps-in-air.png?crop=2308,2308,x990,y0&quality=50&width=270",
            "totalBytes": 91318
          },
          {
            "url": "https://cdn.cookielaw.org/vendorlist/iab2V2Data.json",
            "totalBytes": 88923
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "totalBytes": 83868
          },
          {
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89733819007-6-a-92-b-62-e-91-aa-4-e-7-c-80-c-49-cd-7-dc-94230-a.png?crop=282,283,x0,y0&quality=50&width=270",
            "totalBytes": 80093
          },
          {
            "url": "https://cdn.cookielaw.org/consent/45e29b99-6e34-4a9d-ab94-5c6d56bfac9e/019c9ea5-4e14-78f7-b0c9-51d04d1fbc99/en.json",
            "totalBytes": 41300
          },
          {
            "url": "https://eu.desmoinesregister.com/",
            "totalBytes": 37469
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/polymer/lib/mixins/property-effects.html",
            "totalBytes": 25999
          }
        ],
        "sortedBy": [
          "totalBytes"
        ]
      },
      "guidanceLevel": 1
    },
    "unminified-css": {
      "id": "unminified-css",
      "title": "Minify CSS",
      "description": "Minifying CSS files can reduce network payload sizes. [Learn how to minify CSS](https://developer.chrome.com/docs/lighthouse/performance/unminified-css/).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 0,
      "numericUnit": "millisecond",
      "displayValue": "",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "opportunity",
        "headings": [],
        "items": [],
        "overallSavingsMs": 0,
        "overallSavingsBytes": 0,
        "sortedBy": [
          "wastedBytes"
        ],
        "debugData": {
          "type": "debugdata",
          "metricSavings": {
            "FCP": 0,
            "LCP": 0
          }
        }
      },
      "guidanceLevel": 3
    },
    "unminified-javascript": {
      "id": "unminified-javascript",
      "title": "Minify JavaScript",
      "description": "Minifying JavaScript files can reduce payload sizes and script parse time. [Learn how to minify JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unminified-javascript/).",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 150,
      "numericUnit": "millisecond",
      "displayValue": "Est savings of 284 KiB",
      "warnings": [],
      "metricSavings": {
        "FCP": 0,
        "LCP": 150
      },
      "details": {
        "type": "opportunity",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Transfer Size"
          },
          {
            "key": "wastedBytes",
            "valueType": "bytes",
            "label": "Est Savings"
          }
        ],
        "items": [
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7BObject%7D%20*%2Fvar%20CaseMap%3DPolymer.CaseMap%3B%2F%2F%20Monotonically%20increasing%20unique%20ID%20used%20for%20de-duping%20effects%20triggered%0A%2F%2F%20from%20multiple%20properties%20in%20the%20same%20turn%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20Property%20effect%20types%3B%20effects%20are%20stored%20on%20the%20prototype%20using%20these%20keys%0A%20%20%20*%20%40enum%20%7Bstring%7D%0A%20%20%20*%2Fvar%20TYPES%3D%7BCOMPUTE%3A'__computeEffects'%2CREFLECT%3A'__reflectEffects'%2CNOTIFY%3A'__notifyEffects'%2CPROPAGATE%3A'__propagateEffects'%2COBSERVE%3A'__observeEffects'%2CREAD_ONLY%3A'__readOnly'%7D%3B%2F**%20%40const%20%7BRegExp%7D%20*%2Fvar%20capitalAttributeRegex%3D%2F%5BA-Z%5D%2F%3B%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20name%3A%20(string%20%7C%20undefined)%2C%0A%20%20%20*%20structured%3A%20(boolean%20%7C%20undefined)%2C%0A%20%20%20*%20wildcard%3A%20(boolean%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataTrigger%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20info%3A%20%3F%2C%0A%20%20%20*%20trigger%3A%20(!DataTrigger%20%7C%20undefined)%2C%0A%20%20%20*%20fn%3A%20(!Function%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataEffect%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0Avar%20PropertyEffectsType%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Ensures%20that%20the%20model%20has%20an%20own-property%20map%20of%20effects%20for%20the%20given%20type.%0A%20%20%20*%20The%20model%20may%20be%20a%20prototype%20or%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20Property%20effects%20are%20stored%20as%20arrays%20of%20effects%20by%20property%20in%20a%20map%2C%0A%20%20%20*%20by%20named%20type%20on%20the%20model.%20e.g.%0A%20%20%20*%0A%20%20%20*%20%20%20__computeEffects%3A%20%7B%0A%20%20%20*%20%20%20%20%20foo%3A%20%5B%20...%20%5D%2C%0A%20%20%20*%20%20%20%20%20bar%3A%20%5B%20...%20%5D%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20If%20the%20model%20does%20not%20yet%20have%20an%20effect%20map%20for%20the%20type%2C%20one%20is%20created%0A%20%20%20*%20and%20returned.%20%20If%20it%20does%2C%20but%20it%20is%20not%20an%20own%20property%20(i.e.%20the%0A%20%20%20*%20prototype%20had%20effects)%2C%20the%20the%20map%20is%20deeply%20cloned%20and%20the%20copy%20is%0A%20%20%20*%20set%20on%20the%20model%20and%20returned%2C%20ready%20for%20new%20effects%20to%20be%20added.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Property%20effect%20type%0A%20%20%20*%20%40return%20%7BObject%7D%20The%20own-property%20map%20of%20effects%20for%20the%20given%20type%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20ensureOwnEffectMap(model%2Ctype)%7Bvar%20effects%3Dmodel%5Btype%5D%3Bif(!effects)%7Beffects%3Dmodel%5Btype%5D%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(type))%7Beffects%3Dmodel%5Btype%5D%3DObject.create(model%5Btype%5D)%3Bfor(var%20p%20in%20effects)%7Bvar%20protoFx%3Deffects%5Bp%5D%3Bvar%20instFx%3Deffects%5Bp%5D%3DArray(protoFx.length)%3Bfor(var%20i%3D0%3Bi%3CprotoFx.length%3Bi%2B%2B)%7BinstFx%5Bi%5D%3DprotoFx%5Bi%5D%3B%7D%7D%7Dreturn%20effects%3B%7D%2F%2F%20--%20effects%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Runs%20all%20effects%20of%20a%20given%20type%20for%20the%20given%20set%20of%20property%20changes%0A%20%20%20*%20on%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffects(inst%2Ceffects%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bif(effects)%7Bvar%20ran%3Dfalse%3Bvar%20id%3DdedupeId%2B%2B%3Bfor(var%20prop%20in%20props)%7Bif(runEffectsForProperty(inst%2Ceffects%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs))%7Bran%3Dtrue%3B%7D%7Dreturn%20ran%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Runs%20a%20list%20of%20effects%20for%20a%20given%20property.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7Bnumber%7D%20dedupeId%20Counter%20used%20for%20de-duping%20effects%0A%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Name%20of%20changed%20property%0A%20%20%20*%20%40param%20%7B*%7D%20props%20Changed%20properties%0A%20%20%20*%20%40param%20%7B*%7D%20oldProps%20Old%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffectsForProperty(inst%2Ceffects%2CdedupeId%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bvar%20ran%3Dfalse%3Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(prop)%3Aprop%3Bvar%20fxs%3Deffects%5BrootProperty%5D%3Bif(fxs)%7Bfor(var%20i%3D0%2Cl%3Dfxs.length%2Cfx%3Bi%3Cl%26%26(fx%3Dfxs%5Bi%5D)%3Bi%2B%2B)%7Bif((!fx.info%7C%7Cfx.info.lastRun!%3D%3DdedupeId)%26%26(!hasPaths%7C%7CpathMatchesTrigger(prop%2Cfx.trigger)))%7Bif(fx.info)%7Bfx.info.lastRun%3DdedupeId%3B%7Dfx.fn(inst%2Cprop%2Cprops%2ColdProps%2Cfx.info%2ChasPaths%2CextraArgs)%3Bran%3Dtrue%3B%7D%7D%7Dreturn%20ran%3B%7D%2F**%0A%20%20%20*%20Determines%20whether%20a%20property%2Fpath%20that%20has%20changed%20matches%20the%20trigger%0A%20%20%20*%20criteria%20for%20an%20effect.%20%20A%20trigger%20is%20a%20descriptor%20with%20the%20following%0A%20%20%20*%20structure%2C%20which%20matches%20the%20descriptors%20returned%20from%20%60parseArg%60.%0A%20%20%20*%20e.g.%20for%20%60foo.bar.*%60%3A%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20trigger%3A%20%7B%0A%20%20%20*%20%20%20name%3A%20'a.b'%2C%0A%20%20%20*%20%20%20structured%3A%20true%2C%0A%20%20%20*%20%20%20wildcard%3A%20true%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20If%20no%20trigger%20is%20given%2C%20the%20path%20is%20deemed%20to%20match.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20or%20property%20that%20changed%0A%20%20%20*%20%40param%20%7BDataTrigger%7D%20trigger%20Descriptor%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20path%20matched%20the%20trigger%0A%20%20%20*%2Ffunction%20pathMatchesTrigger(path%2Ctrigger)%7Bif(trigger)%7Bvar%20triggerPath%3Dtrigger.name%3Breturn%20triggerPath%3D%3Dpath%7C%7Ctrigger.structured%26%26Polymer.Path.isAncestor(triggerPath%2Cpath)%7C%7Ctrigger.wildcard%26%26Polymer.Path.isDescendant(triggerPath%2Cpath)%3B%7Delse%7Breturn%20true%3B%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22observer%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Calls%20the%20method%20with%20%60info.methodName%60%20on%20the%20instance%2C%20passing%20the%0A%20%20%20*%20new%20and%20old%20values.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runObserverEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20fn%3Dtypeof%20info.method%3D%3D%3D%22string%22%3Finst%5Binfo.method%5D%3Ainfo.method%3Bvar%20changedProp%3Dinfo.property%3Bif(fn)%7Bfn.call(inst%2Cinst.__data%5BchangedProp%5D%2ColdProps%5BchangedProp%5D)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('observer%20method%20%60'%2Binfo.method%2B'%60%20not%20defined')%3B%7D%7D%2F**%0A%20%20%20*%20Runs%20%22notify%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20will%20dispatch%20path%20notification%20events%20in%20the%20case%20that%20the%20property%0A%20%20%20*%20changed%20was%20a%20path%20and%20the%20root%20property%20for%20that%20path%20didn't%20have%20a%0A%20%20%20*%20%22notify%22%20effect.%20%20This%20is%20to%20maintain%201.0%20behavior%20that%20did%20not%20require%0A%20%20%20*%20%60notify%3A%20true%60%20to%20ensure%20object%20sub-property%20notifications%20were%0A%20%20%20*%20sent.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20notifyProps%20Bag%20of%20properties%20to%20notify%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffects(inst%2CnotifyProps%2Cprops%2ColdProps%2ChasPaths)%7B%2F%2F%20Notify%0Avar%20fxs%3Dinst%5BTYPES.NOTIFY%5D%3Bvar%20notified%3Dvoid%200%3Bvar%20id%3DdedupeId%2B%2B%3B%2F%2F%20Try%20normal%20notify%20effects%3B%20if%20none%2C%20fall%20back%20to%20try%20path%20notification%0Afor(var%20prop%20in%20notifyProps)%7Bif(notifyProps%5Bprop%5D)%7Bif(fxs%26%26runEffectsForProperty(inst%2Cfxs%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths))%7Bnotified%3Dtrue%3B%7Delse%20if(hasPaths%26%26notifyPath(inst%2Cprop%2Cprops))%7Bnotified%3Dtrue%3B%7D%7D%7D%2F%2F%20Flush%20host%20if%20we%20actually%20notified%20and%20host%20was%20batching%0A%2F%2F%20And%20the%20host%20has%20already%20initialized%20clients%3B%20this%20prevents%0A%2F%2F%20an%20issue%20with%20a%20host%20observing%20data%20changes%20before%20clients%20are%20ready.%0Avar%20host%3Dvoid%200%3Bif(notified%26%26(host%3Dinst.__dataHost)%26%26host._invalidateProperties)%7Bhost._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20with%20path%20information%20in%20the%20detail%0A%20%20%20*%20object%20to%20indicate%20a%20sub-path%20of%20the%20property%20was%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20that%20was%20changed%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20path%20was%20notified%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifyPath(inst%2Cpath%2Cprops)%7Bvar%20rootProperty%3DPolymer.Path.root(path)%3Bif(rootProperty!%3D%3Dpath)%7Bvar%20eventName%3DPolymer.CaseMap.camelToDashCase(rootProperty)%2B'-changed'%3BdispatchNotifyEvent(inst%2CeventName%2Cprops%5Bpath%5D%2Cpath)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20to%20indicate%20a%20property%20(or%20path)%0A%20%20%20*%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20The%20name%20of%20the%20event%20to%20send%20('%7Bproperty%7D-changed')%0A%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20of%20the%20changed%20property%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20null%20%7C%20undefined%7D%20path%20If%20a%20sub-path%20of%20this%20property%20changed%2C%20the%20path%0A%20%20%20*%20%20%20that%20changed%20(optional).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2Ffunction%20dispatchNotifyEvent(inst%2CeventName%2Cvalue%2Cpath)%7Bvar%20detail%3D%7Bvalue%3Avalue%2CqueueProperty%3Atrue%7D%3Bif(path)%7Bdetail.path%3Dpath%3B%7D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finst.dispatchEvent(new%20CustomEvent(eventName%2C%7Bdetail%3Adetail%7D))%3B%7D%2F**%0A%20%20%20*%20Implements%20the%20%22notify%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Dispatches%20a%20non-bubbling%20event%20named%20%60info.eventName%60%20on%20the%20instance%0A%20%20%20*%20with%20a%20detail%20object%20containing%20the%20new%20%60value%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo%2ChasPaths)%7Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(property)%3Aproperty%3Bvar%20path%3DrootProperty!%3Dproperty%3Fproperty%3Anull%3Bvar%20value%3Dpath%3FPolymer.Path.get(inst%2Cpath)%3Ainst.__data%5Bproperty%5D%3Bif(path%26%26value%3D%3D%3Dundefined)%7Bvalue%3Dprops%5Bproperty%5D%3B%2F%2F%20specifically%20for%20.splices%0A%7DdispatchNotifyEvent(inst%2Cinfo.eventName%2Cvalue%2Cpath)%3B%7D%2F**%0A%20%20%20*%20Handler%20function%20for%202-way%20notification%20events.%20Receives%20context%0A%20%20%20*%20information%20captured%20in%20the%20%60addNotifyListener%60%20closure%20from%20the%0A%20%20%20*%20%60__notifyListeners%60%20metadata.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20value%20of%20the%20notified%20property%20to%20the%20host%20property%20or%20path.%20%20If%0A%20%20%20*%20the%20event%20contained%20path%20information%2C%20translate%20that%20path%20to%20the%20host%0A%20%20%20*%20scope's%20name%20for%20that%20path%20first.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BCustomEvent%7D%20event%20Notification%20event%20(e.g.%20'%3Cproperty%3E-changed')%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20handling%20the%20notification%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20fromProp%20Child%20element%20property%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bstring%7D%20toPath%20Host%20property%2Fpath%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bboolean%7D%20negate%20Whether%20the%20binding%20was%20negated%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20handleNotification(event%2Cinst%2CfromProp%2CtoPath%2Cnegate)%7Bvar%20value%3Dvoid%200%3Bvar%20detail%3D%2F**%20%40type%20%7BObject%7D%20*%2Fevent.detail%3Bvar%20fromPath%3Ddetail%26%26detail.path%3Bif(fromPath)%7BtoPath%3DPolymer.Path.translate(fromProp%2CtoPath%2CfromPath)%3Bvalue%3Ddetail%26%26detail.value%3B%7Delse%7Bvalue%3Devent.currentTarget%5BfromProp%5D%3B%7Dvalue%3Dnegate%3F!value%3Avalue%3Bif(!inst%5BTYPES.READ_ONLY%5D%7C%7C!inst%5BTYPES.READ_ONLY%5D%5BtoPath%5D)%7Bif(inst._setPendingPropertyOrPath(toPath%2Cvalue%2Ctrue%2CBoolean(fromPath))%26%26(!detail%7C%7C!detail.queueProperty))%7Binst._invalidateProperties()%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22reflect%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20attribute%20named%20%60info.attrName%60%20to%20the%20given%20property%20value.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runReflectEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20value%3Dinst.__data%5Bproperty%5D%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cinfo.attrName%2C'attribute'%2C%2F**%20%40type%20%7BNode%7D%20*%2Finst)%3B%7Dinst._propertyToAttribute(property%2Cinfo.attrName%2Cvalue)%3B%7D%2F**%0A%20%20%20*%20Runs%20%22computed%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20continues%20to%20run%20computed%20effects%20based%20on%20the%20output%20of%20each%20pass%20until%0A%20%20%20*%20there%20are%20no%20more%20newly%20computed%20properties.%20%20This%20ensures%20that%20all%0A%20%20%20*%20properties%20that%20will%20be%20computed%20by%20the%20initial%20set%20of%20changes%20are%0A%20%20%20*%20computed%20before%20other%20effects%20(binding%20propagation%2C%20observers%2C%20and%20notify)%0A%20%20%20*%20run.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffects(inst%2CchangedProps%2ColdProps%2ChasPaths)%7Bvar%20computeEffects%3Dinst%5BTYPES.COMPUTE%5D%3Bif(computeEffects)%7Bvar%20inputProps%3DchangedProps%3Bwhile(runEffects(inst%2CcomputeEffects%2CinputProps%2ColdProps%2ChasPaths))%7BObject.assign(oldProps%2Cinst.__dataOld)%3BObject.assign(changedProps%2Cinst.__dataPending)%3BinputProps%3Dinst.__dataPending%3Binst.__dataPending%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22computed%20property%22%20effect%20by%20running%20the%20method%20with%20the%0A%20%20%20*%20values%20of%20the%20arguments%20specified%20in%20the%20%60info%60%20object%20and%20setting%20the%0A%20%20%20*%20return%20value%20to%20the%20computed%20property%20specified.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20result%3DrunMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%3Bvar%20computedProp%3Dinfo.methodInfo%3Bif(inst.__dataHasAccessor%26%26inst.__dataHasAccessor%5BcomputedProp%5D)%7Binst._setPendingProperty(computedProp%2Cresult%2Ctrue)%3B%7Delse%7Binst%5BcomputedProp%5D%3Dresult%3B%7D%7D%2F**%0A%20%20%20*%20Computes%20path%20changes%20based%20on%20path%20links%20set%20up%20using%20the%20%60linkPaths%60%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20whose%20props%20are%20changing%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3C(string%7Cnumber)%3E%7D%20path%20Path%20that%20has%20changed%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20changed%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeLinkedPaths(inst%2Cpath%2Cvalue)%7Bvar%20links%3Dinst.__dataLinkedPaths%3Bif(links)%7Bvar%20link%3Dvoid%200%3Bfor(var%20a%20in%20links)%7Bvar%20b%3Dlinks%5Ba%5D%3Bif(Polymer.Path.isDescendant(a%2Cpath))%7Blink%3DPolymer.Path.translate(a%2Cb%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7Delse%20if(Polymer.Path.isDescendant(b%2Cpath))%7Blink%3DPolymer.Path.translate(b%2Ca%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7D%7D%7D%7D%2F%2F%20--%20bindings%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Adds%20binding%20metadata%20to%20the%20current%20%60nodeInfo%60%2C%20and%20binding%20effects%0A%20%20%20*%20for%20all%20part%20dependencies%20to%20%60templateInfo%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20*%20%40param%20%7Bstring%7D%20kind%20Binding%20kind%2C%20either%20'property'%2C%20'attribute'%2C%20or%20'text'%0A%20%20%20*%20%40param%20%7Bstring%7D%20target%20Target%20property%20name%0A%20%20%20*%20%40param%20%7B!Array%3C!BindingPart%3E%7D%20parts%20Array%20of%20binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bstring%3D%7D%20literal%20Literal%20text%20surrounding%20binding%20parts%20(specified%0A%20%20%20*%20%20%20only%20for%20'property'%20bindings%2C%20since%20these%20must%20be%20initialized%20as%20part%0A%20%20%20*%20%20%20of%20boot-up)%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addBinding(constructor%2CtemplateInfo%2CnodeInfo%2Ckind%2Ctarget%2Cparts%2Cliteral)%7B%2F%2F%20Create%20binding%20metadata%20and%20add%20to%20nodeInfo%0AnodeInfo.bindings%3DnodeInfo.bindings%7C%7C%5B%5D%3Bvar%2F**%20Binding%20*%2Fbinding%3D%7Bkind%3Akind%2Ctarget%3Atarget%2Cparts%3Aparts%2Cliteral%3Aliteral%2CisCompound%3Aparts.length!%3D%3D1%7D%3BnodeInfo.bindings.push(binding)%3B%2F%2F%20Add%20listener%20info%20to%20binding%20metadata%0Aif(shouldAddListener(binding))%7Bvar%20_binding%24parts%24%3Dbinding.parts%5B0%5D%2Cevent%3D_binding%24parts%24.event%2Cnegate%3D_binding%24parts%24.negate%3Bbinding.listenerEvent%3Devent%7C%7CCaseMap.camelToDashCase(target)%2B'-changed'%3Bbinding.listenerNegate%3Dnegate%3B%7D%2F%2F%20Add%20%22propagate%22%20property%20effects%20to%20templateInfo%0Avar%20index%3DtemplateInfo.nodeInfoList.length%3Bfor(var%20i%3D0%3Bi%3Cbinding.parts.length%3Bi%2B%2B)%7Bvar%20part%3Dbinding.parts%5Bi%5D%3Bpart.compoundIndex%3Di%3BaddEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%3B%7D%7D%2F**%0A%20%20%20*%20Adds%20property%20effects%20to%20the%20given%20%60templateInfo%60%20for%20the%20given%20binding%0A%20%20%20*%20part.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20into%20%60nodeInfoList%60%20for%20this%20node%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20addEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%7Bif(!part.literal)%7Bif(binding.kind%3D%3D%3D'attribute'%26%26binding.target%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Cannot%20set%20attribute%20'%2Bbinding.target%2B'%20because%20%22-%22%20is%20not%20a%20valid%20attribute%20starting%20character')%3B%7Delse%7Bvar%20dependencies%3Dpart.dependencies%3Bvar%20info%3D%7Bindex%3Aindex%2Cbinding%3Abinding%2Cpart%3Apart%2Cevaluator%3Aconstructor%7D%3Bfor(var%20j%3D0%3Bj%3Cdependencies.length%3Bj%2B%2B)%7Bvar%20trigger%3Ddependencies%5Bj%5D%3Bif(typeof%20trigger%3D%3D'string')%7Btrigger%3DparseArg(trigger)%3Btrigger.wildcard%3Dtrue%3B%7Dconstructor._addTemplatePropertyEffect(templateInfo%2Ctrigger.rootProperty%2C%7Bfn%3ArunBindingEffect%2Cinfo%3Ainfo%2Ctrigger%3Atrigger%7D)%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22binding%22%20(property%2Fpath%20binding)%20effect.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20binding%20syntax%20is%20overridable%20via%20%60_parseBindings%60%20and%0A%20%20%20*%20%60_evaluateBinding%60.%20%20This%20method%20will%20call%20%60_evaluateBinding%60%20for%20any%0A%20%20%20*%20non-literal%20parts%20returned%20from%20%60_parseBindings%60.%20%20However%2C%0A%20%20%20*%20there%20is%20no%20support%20for%20_path_%20bindings%20via%20custom%20binding%20parts%2C%0A%20%20%20*%20as%20this%20is%20specific%20to%20Polymer's%20path%20binding%20syntax.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7BArray%7D%20nodeList%20List%20of%20nodes%20associated%20with%20%60nodeInfoList%60%20template%0A%20%20%20*%20%20%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runBindingEffect(inst%2Cpath%2Cprops%2ColdProps%2Cinfo%2ChasPaths%2CnodeList)%7Bvar%20node%3DnodeList%5Binfo.index%5D%3Bvar%20binding%3Dinfo.binding%3Bvar%20part%3Dinfo.part%3B%2F%2F%20Subpath%20notification%3A%20transform%20path%20and%20set%20to%20client%0A%2F%2F%20e.g.%3A%20foo%3D%22%7B%7Bobj.sub%7D%7D%22%2C%20path%3A%20'obj.sub.prop'%2C%20set%20'foo.prop'%3Dobj.sub.prop%0Aif(hasPaths%26%26part.source%26%26path.length%3Epart.source.length%26%26binding.kind%3D%3D'property'%26%26!binding.isCompound%26%26node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bbinding.target%5D)%7Bvar%20value%3Dprops%5Bpath%5D%3Bpath%3DPolymer.Path.translate(part.source%2Cbinding.target%2Cpath)%3Bif(node._setPendingPropertyOrPath(path%2Cvalue%2Cfalse%2Ctrue))%7Binst._enqueueClient(node)%3B%7D%7Delse%7Bvar%20_value%3Dinfo.evaluator._evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%3B%2F%2F%20Propagate%20value%20to%20child%0AapplyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2C_value)%3B%7D%7D%2F**%0A%20%20%20*%20Sets%20the%20value%20for%20an%20%22binding%22%20(binding)%20effect%20to%20a%20node%2C%0A%20%20%20*%20either%20as%20a%20property%20or%20attribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20owning%20the%20binding%20effect%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Target%20node%20for%20binding%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20applyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2Cvalue)%7Bvalue%3DcomputeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cbinding.target%2Cbinding.kind%2Cnode)%3B%7Dif(binding.kind%3D%3D'attribute')%7B%2F%2F%20Attribute%20binding%0Ainst._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%2Cvalue%2Cbinding.target)%3B%7Delse%7B%2F%2F%20Property%20binding%0Avar%20prop%3Dbinding.target%3Bif(node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bprop%5D)%7Bif(!node%5BTYPES.READ_ONLY%5D%7C%7C!node%5BTYPES.READ_ONLY%5D%5Bprop%5D)%7Bif(node._setPendingProperty(prop%2Cvalue))%7Binst._enqueueClient(node)%3B%7D%7D%7Delse%7Binst._setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%3B%7D%7D%7D%2F**%0A%20%20%20*%20Transforms%20an%20%22binding%22%20effect%20value%20based%20on%20compound%20%26%20negation%0A%20%20%20*%20effect%20metadata%2C%20as%20well%20as%20handling%20for%20special-case%20properties%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20the%20value%20will%20be%20set%20to%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Transformed%20value%20to%20set%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%7Bif(binding.isCompound)%7Bvar%20storage%3Dnode.__dataCompoundStorage%5Bbinding.target%5D%3Bstorage%5Bpart.compoundIndex%5D%3Dvalue%3Bvalue%3Dstorage.join('')%3B%7Dif(binding.kind!%3D%3D'attribute')%7B%2F%2F%20Some%20browsers%20serialize%20%60undefined%60%20to%20%60%22undefined%22%60%0Aif(binding.target%3D%3D%3D'textContent'%7C%7Cbinding.target%3D%3D%3D'value'%26%26(node.localName%3D%3D%3D'input'%7C%7Cnode.localName%3D%3D%3D'textarea'))%7Bvalue%3Dvalue%3D%3Dundefined%3F''%3Avalue%3B%7D%7Dreturn%20value%3B%7D%2F**%0A%20%20%20*%20Returns%20true%20if%20a%20binding's%20metadata%20meets%20all%20the%20requirements%20to%20allow%0A%20%20%20*%202-way%20binding%2C%20and%20therefore%20a%20%60%3Cproperty%3E-changed%60%20event%20listener%20should%20be%0A%20%20%20*%20added%3A%0A%20%20%20*%20-%20used%20curly%20braces%0A%20%20%20*%20-%20is%20a%20property%20(not%20attribute)%20binding%0A%20%20%20*%20-%20is%20not%20a%20textContent%20binding%0A%20%20%20*%20-%20is%20not%20compound%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%202-way%20listener%20should%20be%20added%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20shouldAddListener(binding)%7Breturn%20Boolean(binding.target)%26%26binding.kind!%3D'attribute'%26%26binding.kind!%3D'text'%26%26!binding.isCompound%26%26binding.parts%5B0%5D.mode%3D%3D%3D'%7B'%3B%7D%2F**%0A%20%20%20*%20Setup%20compound%20binding%20storage%20structures%2C%20notify%20listeners%2C%20and%20dataHost%0A%20%20%20*%20references%20onto%20the%20bound%20nodeList.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20that%20bas%20been%20previously%20bound%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupBindings(inst%2CtemplateInfo)%7B%2F%2F%20Setup%20compound%20storage%2C%20dataHost%2C%20and%20notify%20listeners%0Avar%20nodeList%3DtemplateInfo.nodeList%2CnodeInfoList%3DtemplateInfo.nodeInfoList%3Bif(nodeInfoList.length)%7Bfor(var%20i%3D0%3Bi%3CnodeInfoList.length%3Bi%2B%2B)%7Bvar%20info%3DnodeInfoList%5Bi%5D%3Bvar%20node%3DnodeList%5Bi%5D%3Bvar%20bindings%3Dinfo.bindings%3Bif(bindings)%7Bfor(var%20_i%3D0%3B_i%3Cbindings.length%3B_i%2B%2B)%7Bvar%20binding%3Dbindings%5B_i%5D%3BsetupCompoundStorage(node%2Cbinding)%3BaddNotifyListener(node%2Cinst%2Cbinding)%3B%7D%7Dnode.__dataHost%3Dinst%3B%7D%7D%7D%2F**%0A%20%20%20*%20Initializes%20%60__dataCompoundStorage%60%20local%20storage%20on%20a%20bound%20node%20with%0A%20%20%20*%20initial%20literal%20data%20for%20compound%20bindings%2C%20and%20sets%20the%20joined%0A%20%20%20*%20literal%20parts%20to%20the%20bound%20property.%0A%20%20%20*%0A%20%20%20*%20When%20changes%20to%20compound%20parts%20occur%2C%20they%20are%20first%20set%20into%20the%20compound%0A%20%20%20*%20storage%20array%20for%20that%20property%2C%20and%20then%20the%20array%20is%20joined%20to%20result%20in%0A%20%20%20*%20the%20final%20value%20set%20to%20the%20property%2Fattribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Bound%20node%20to%20initialize%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupCompoundStorage(node%2Cbinding)%7Bif(binding.isCompound)%7B%2F%2F%20Create%20compound%20storage%20map%0Avar%20storage%3Dnode.__dataCompoundStorage%7C%7C(node.__dataCompoundStorage%3D%7B%7D)%3Bvar%20parts%3Dbinding.parts%3B%2F%2F%20Copy%20literals%20from%20parts%20into%20storage%20for%20this%20binding%0Avar%20literals%3Dnew%20Array(parts.length)%3Bfor(var%20j%3D0%3Bj%3Cparts.length%3Bj%2B%2B)%7Bliterals%5Bj%5D%3Dparts%5Bj%5D.literal%3B%7Dvar%20target%3Dbinding.target%3Bstorage%5Btarget%5D%3Dliterals%3B%2F%2F%20Configure%20properties%20with%20their%20literal%20parts%0Aif(binding.literal%26%26binding.kind%3D%3D'property')%7Bnode%5Btarget%5D%3Dbinding.literal%3B%7D%7D%7D%2F**%0A%20%20%20*%20Adds%20a%202-way%20binding%20notification%20event%20listener%20to%20the%20node%20specified%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20node%20Child%20element%20to%20add%20listener%20to%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20to%20handle%20notification%20event%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addNotifyListener(node%2Cinst%2Cbinding)%7Bif(binding.listenerEvent)%7Bvar%20part%3Dbinding.parts%5B0%5D%3Bnode.addEventListener(binding.listenerEvent%2Cfunction(e)%7BhandleNotification(e%2Cinst%2Cbinding.target%2Cpart.source%2Cpart.negate)%3B%7D)%3B%7D%7D%2F%2F%20--%20for%20method-based%20effects%20(complexObserver%20%26%20computed)%20--------------%0A%2F**%0A%20%20%20*%20Adds%20property%20effects%20for%20each%20argument%20in%20the%20method%20signature%20(and%0A%20%20%20*%20optionally%2C%20for%20the%20method%20name%20if%20%60dynamic%60%20is%20true)%20that%20calls%20the%0A%20%20%20*%20provided%20effect%20function.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BElement%20%7C%20Object%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Type%20of%20property%20effect%20to%20add%0A%20%20%20*%20%40param%20%7BFunction%7D%20effectFn%20Function%20to%20run%20when%20arguments%20change%0A%20%20%20*%20%40param%20%7B*%3D%7D%20methodInfo%20Effect-specific%20information%20to%20be%20included%20in%0A%20%20%20*%20%20%20method%20effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%20Note%2C%0A%20%20%20*%20%20%20defaults%20to%20true%20if%20the%20signature%20is%20static%20(sig.static%20is%20true).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20createMethodEffect(model%2Csig%2Ctype%2CeffectFn%2CmethodInfo%2CdynamicFn)%7BdynamicFn%3Dsig.static%7C%7CdynamicFn%26%26((typeof%20dynamicFn%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(dynamicFn))!%3D%3D'object'%7C%7CdynamicFn%5Bsig.methodName%5D)%3Bvar%20info%3D%7BmethodName%3Asig.methodName%2Cargs%3Asig.args%2CmethodInfo%3AmethodInfo%2CdynamicFn%3AdynamicFn%7D%3Bfor(var%20i%3D0%2Carg%3Bi%3Csig.args.length%26%26(arg%3Dsig.args%5Bi%5D)%3Bi%2B%2B)%7Bif(!arg.literal)%7Bmodel._addPropertyEffect(arg.rootProperty%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%2Ctrigger%3Aarg%7D)%3B%7D%7Dif(dynamicFn)%7Bmodel._addPropertyEffect(sig.methodName%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%7D)%3B%7D%7D%2F**%0A%20%20%20*%20Calls%20a%20method%20with%20arguments%20marshaled%20from%20properties%20on%20the%20instance%0A%20%20%20*%20based%20on%20the%20method%20signature%20contained%20in%20the%20effect%20metadata.%0A%20%20%20*%0A%20%20%20*%20Multi-property%20observers%2C%20computed%20properties%2C%20and%20inline%20computing%0A%20%20%20*%20functions%20call%20this%20function%20to%20invoke%20the%20method%2C%20then%20use%20the%20return%0A%20%20%20*%20value%20accordingly.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20return%20value%20from%20the%20method%20invocation%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Avar%20context%3Dinst._methodHost%7C%7Cinst%3Bvar%20fn%3Dcontext%5Binfo.methodName%5D%3Bif(fn)%7Bvar%20args%3Dinst._marshalArgs(info.args%2Cproperty%2Cprops)%3Breturn%20fn.apply(context%2Cargs)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('method%20%60'%2Binfo.methodName%2B'%60%20not%20defined')%3B%7D%7Dvar%20emptyArray%3D%5B%5D%3B%2F%2F%20Regular%20expressions%20used%20for%20binding%0Avar%20IDENT%3D'(%3F%3A'%2B'%5Ba-zA-Z_%24%5D%5B%5C%5Cw.%3A%24%5C%5C-*%5D*'%2B')'%3Bvar%20NUMBER%3D'(%3F%3A'%2B'%5B-%2B%5D%3F%5B0-9%5D*%5C%5C.%3F%5B0-9%5D%2B(%3F%3A%5BeE%5D%5B-%2B%5D%3F%5B0-9%5D%2B)%3F'%2B')'%3Bvar%20SQUOTE_STRING%3D'(%3F%3A'%2B'%5C'(%3F%3A%5B%5E%5C'%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%5C''%2B')'%3Bvar%20DQUOTE_STRING%3D'(%3F%3A'%2B'%22(%3F%3A%5B%5E%22%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%22'%2B')'%3Bvar%20STRING%3D'(%3F%3A'%2BSQUOTE_STRING%2B'%7C'%2BDQUOTE_STRING%2B')'%3Bvar%20ARGUMENT%3D'(%3F%3A('%2BIDENT%2B'%7C'%2BNUMBER%2B'%7C'%2BSTRING%2B')%5C%5Cs*'%2B')'%3Bvar%20ARGUMENTS%3D'(%3F%3A'%2BARGUMENT%2B'(%3F%3A%2C%5C%5Cs*'%2BARGUMENT%2B')*'%2B')'%3Bvar%20ARGUMENT_LIST%3D'(%3F%3A'%2B'%5C%5C(%5C%5Cs*'%2B'(%3F%3A'%2BARGUMENTS%2B'%3F'%2B')'%2B'%5C%5C)%5C%5Cs*'%2B')'%3Bvar%20BINDING%3D'('%2BIDENT%2B'%5C%5Cs*'%2BARGUMENT_LIST%2B'%3F'%2B')'%3B%2F%2F%20Group%203%0Avar%20OPEN_BRACKET%3D'(%5C%5C%5B%5C%5C%5B%7C%7B%7B)'%2B'%5C%5Cs*'%3Bvar%20CLOSE_BRACKET%3D'(%3F%3A%5D%5D%7C%7D%7D)'%3Bvar%20NEGATE%3D'(%3F%3A(!)%5C%5Cs*)%3F'%3B%2F%2F%20Group%202%0Avar%20EXPRESSION%3DOPEN_BRACKET%2BNEGATE%2BBINDING%2BCLOSE_BRACKET%3Bvar%20bindingRegex%3Dnew%20RegExp(EXPRESSION%2C%22g%22)%3B%2F**%0A%20%20%20*%20Create%20a%20string%20from%20binding%20parts%20of%20all%20the%20literal%20parts%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3CBindingPart%3E%7D%20parts%20All%20parts%20to%20stringify%0A%20%20%20*%20%40return%20%7Bstring%7D%20String%20made%20from%20the%20literal%20parts%0A%20%20%20*%2Ffunction%20literalFromParts(parts)%7Bvar%20s%3D''%3Bfor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bvar%20literal%3Dparts%5Bi%5D.literal%3Bs%2B%3Dliteral%7C%7C''%3B%7Dreturn%20s%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20expression%20string%20for%20a%20method%20signature%2C%20and%20returns%20a%20metadata%0A%20%20%20*%20describing%20the%20method%20in%20terms%20of%20%60methodName%60%2C%20%60static%60%20(whether%20all%20the%0A%20%20%20*%20arguments%20are%20literals)%2C%20and%20an%20array%20of%20%60args%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20expression%20The%20expression%20to%20parse%0A%20%20%20*%20%40return%20%7B%3FMethodSignature%7D%20The%20method%20metadata%20object%20if%20a%20method%20expression%20was%0A%20%20%20*%20%20%20found%2C%20otherwise%20%60undefined%60%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseMethod(expression)%7B%2F%2F%20tries%20to%20match%20valid%20javascript%20property%20names%0Avar%20m%3Dexpression.match(%2F(%5B%5E%5Cs%5D%2B%3F)%5C((%5B%5Cs%5CS%5D*)%5C)%2F)%3Bif(m)%7Bvar%20methodName%3Dm%5B1%5D%3Bvar%20sig%3D%7BmethodName%3AmethodName%2Cstatic%3Atrue%2Cargs%3AemptyArray%7D%3Bif(m%5B2%5D.trim())%7B%2F%2F%20replace%20escaped%20commas%20with%20comma%20entity%2C%20split%20on%20un-escaped%20commas%0Avar%20args%3Dm%5B2%5D.replace(%2F%5C%5C%2C%2Fg%2C'%26comma%3B').split('%2C')%3Breturn%20parseArgs(args%2Csig)%3B%7Delse%7Breturn%20sig%3B%7D%7Dreturn%20null%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20array%20of%20arguments%20and%20sets%20the%20%60args%60%20property%20of%20the%20supplied%0A%20%20%20*%20signature%20metadata%20object.%20Sets%20the%20%60static%60%20property%20to%20false%20if%20any%0A%20%20%20*%20argument%20is%20a%20non-literal.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3Cstring%3E%7D%20argList%20Array%20of%20argument%20names%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%20object%0A%20%20%20*%20%40return%20%7B!MethodSignature%7D%20The%20updated%20signature%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArgs(argList%2Csig)%7Bsig.args%3DargList.map(function(rawArg)%7Bvar%20arg%3DparseArg(rawArg)%3Bif(!arg.literal)%7Bsig.static%3Dfalse%3B%7Dreturn%20arg%3B%7D%2Cthis)%3Breturn%20sig%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20individual%20argument%2C%20and%20returns%20an%20argument%20metadata%20object%0A%20%20%20*%20with%20the%20following%20fields%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%7B%0A%20%20%20*%20%20%20%20%20value%3A%20'prop'%2C%20%20%20%20%20%20%20%20%2F%2F%20property%2Fpath%20or%20literal%20value%0A%20%20%20*%20%20%20%20%20literal%3A%20false%2C%20%20%20%20%20%20%20%2F%2F%20whether%20argument%20is%20a%20literal%0A%20%20%20*%20%20%20%20%20structured%3A%20false%2C%20%20%20%20%2F%2F%20whether%20the%20property%20is%20a%20path%0A%20%20%20*%20%20%20%20%20rootProperty%3A%20'prop'%2C%20%2F%2F%20the%20root%20property%20of%20the%20path%0A%20%20%20*%20%20%20%20%20wildcard%3A%20false%20%20%20%20%20%20%20%2F%2F%20whether%20the%20argument%20was%20a%20wildcard%20'.*'%20path%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20rawArg%20The%20string%20value%20of%20the%20argument%0A%20%20%20*%20%40return%20%7B!MethodArg%7D%20Argument%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArg(rawArg)%7B%2F%2F%20clean%20up%20whitespace%0Avar%20arg%3DrawArg.trim()%2F%2F%20replace%20comma%20entity%20with%20comma%0A.replace(%2F%26comma%3B%2Fg%2C'%2C')%2F%2F%20repair%20extra%20escape%20sequences%3B%20note%20only%20commas%20strictly%20need%0A%2F%2F%20escaping%2C%20but%20we%20allow%20any%20other%20char%20to%20be%20escaped%20since%20its%0A%2F%2F%20likely%20users%20will%20do%20this%0A.replace(%2F%5C%5C(.)%2Fg%2C'%5C%241')%3B%2F%2F%20basic%20argument%20descriptor%0Avar%20a%3D%7Bname%3Aarg%2Cvalue%3A''%2Cliteral%3Afalse%7D%3B%2F%2F%20detect%20literal%20value%20(must%20be%20String%20or%20Number)%0Avar%20fc%3Darg%5B0%5D%3Bif(fc%3D%3D%3D'-')%7Bfc%3Darg%5B1%5D%3B%7Dif(fc%3E%3D'0'%26%26fc%3C%3D'9')%7Bfc%3D'%23'%3B%7Dswitch(fc)%7Bcase%22'%22%3Acase'%22'%3Aa.value%3Darg.slice(1%2C-1)%3Ba.literal%3Dtrue%3Bbreak%3Bcase'%23'%3Aa.value%3DNumber(arg)%3Ba.literal%3Dtrue%3Bbreak%3B%7D%2F%2F%20if%20not%20literal%2C%20look%20for%20structured%20path%0Aif(!a.literal)%7Ba.rootProperty%3DPolymer.Path.root(arg)%3B%2F%2F%20detect%20structured%20path%20(has%20dots)%0Aa.structured%3DPolymer.Path.isPath(arg)%3Bif(a.structured)%7Ba.wildcard%3Darg.slice(-2)%3D%3D'.*'%3Bif(a.wildcard)%7Ba.name%3Darg.slice(0%2C-2)%3B%7D%7D%7Dreturn%20a%3B%7D%2F%2F%20data%20api%0A%2F**%0A%20%20%20*%20Sends%20array%20splice%20notifications%20(%60.splices%60%20and%20%60.length%60)%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20_notifySplices(inst%2Carray%2Cpath%2Csplices)%7Bvar%20splicesPath%3Dpath%2B'.splices'%3Binst.notifyPath(splicesPath%2C%7BindexSplices%3Asplices%7D)%3Binst.notifyPath(path%2B'.length'%2Carray.length)%3B%2F%2F%20Null%20here%20to%20allow%20potentially%20large%20splice%20records%20to%20be%20GC'ed.%0Ainst.__data%5BsplicesPath%5D%3D%7BindexSplices%3Anull%7D%3B%7D%2F**%0A%20%20%20*%20Creates%20a%20splice%20record%20and%20sends%20an%20array%20splice%20notification%20for%0A%20%20%20*%20the%20described%20mutation%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20at%20which%20the%20array%20mutation%20occurred%0A%20%20%20*%20%40param%20%7Bnumber%7D%20addedCount%20Number%20of%20added%20items%0A%20%20%20*%20%40param%20%7BArray%7D%20removed%20Array%20of%20removed%20items%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifySplice(inst%2Carray%2Cpath%2Cindex%2CaddedCount%2Cremoved)%7B_notifySplices(inst%2Carray%2Cpath%2C%5B%7Bindex%3Aindex%2CaddedCount%3AaddedCount%2Cremoved%3Aremoved%2Cobject%3Aarray%2Ctype%3A'splice'%7D%5D)%3B%7D%2F**%0A%20%20%20*%20Returns%20an%20upper-cased%20version%20of%20the%20string.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20String%20to%20uppercase%0A%20%20%20*%20%40return%20%7Bstring%7D%20Uppercased%20string%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20upper(name)%7Breturn%20name%5B0%5D.toUpperCase()%2Bname.substring(1)%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%20template%0A%20%20%20*%20binding%20and%20data%20observation%20(collectively%2C%20%22property%20effects%22)%20system.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20uses%20provides%20the%20following%20key%20static%20methods%20for%20adding%0A%20%20%20*%20property%20effects%20to%20an%20element%20class%3A%0A%20%20%20*%20-%20%60addPropertyEffect%60%0A%20%20%20*%20-%20%60createPropertyObserver%60%0A%20%20%20*%20-%20%60createMethodObserver%60%0A%20%20%20*%20-%20%60createNotifyingProperty%60%0A%20%20%20*%20-%20%60createReadOnlyProperty%60%0A%20%20%20*%20-%20%60createReflectedProperty%60%0A%20%20%20*%20-%20%60createComputedProperty%60%0A%20%20%20*%20-%20%60bindTemplate%60%0A%20%20%20*%0A%20%20%20*%20Each%20method%20creates%20one%20or%20more%20property%20accessors%2C%20along%20with%20metadata%0A%20%20%20*%20used%20by%20this%20mixin's%20implementation%20of%20%60_propertiesChanged%60%20to%20perform%0A%20%20%20*%20the%20property%20effects.%0A%20%20%20*%0A%20%20%20*%20Underscored%20versions%20of%20the%20above%20methods%20also%20exist%20on%20the%20element%0A%20%20%20*%20prototype%20for%20adding%20property%20effects%20on%20instances%20at%20runtime.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20this%20mixin%20overrides%20several%20%60PropertyAccessors%60%20methods%2C%20in%0A%20%20%20*%20many%20cases%20to%20maintain%20guarantees%20provided%20by%20the%20Polymer%201.x%20features%3B%0A%20%20%20*%20notably%20it%20changes%20property%20accessors%20to%20be%20synchronous%20by%20default%0A%20%20%20*%20whereas%20the%20default%20when%20using%20%60PropertyAccessors%60%20standalone%20is%20to%20be%0A%20%20%20*%20async%20by%20default.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.TemplateStamp%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%0A%20%20%20*%20template%20binding%20and%20data%20observation%20system.%0A%20%20%20*%2FPolymer.PropertyEffects%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20propertyEffectsBase%3DPolymer.TemplateStamp(Polymer.PropertyAccessors(superClass))%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BpropertyEffectsBase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyEffects%3Dfunction(_propertyEffectsBase)%7B_inherits(PropertyEffects%2C_propertyEffectsBase)%3Bfunction%20PropertyEffects()%7B_classCallCheck(this%2CPropertyEffects)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F%2F%2F%20Used%20to%20identify%20users%20of%20this%20mixin%2C%20ala%20instanceof%0Avar%20_this%3D_possibleConstructorReturn(this%2C(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)).call(this))%3B_this.__isPropertyEffectsClient%3Dtrue%3B%2F**%20%40type%20%7Bnumber%7D%20*%2F%2F%2F%20NOTE%3A%20used%20to%20track%20re-entrant%20calls%20to%20%60_flushProperties%60%0A%2F%2F%20path%20changes%20dirty%20check%20against%20%60__dataTemp%60%20only%20during%20one%20%22turn%22%0A%2F%2F%20and%20are%20cleared%20when%20%60__dataCounter%60%20returns%20to%200.%0A_this.__dataCounter%3D0%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsReady%3B%2F**%20%40type%20%7BArray%7D%20*%2F_this.__dataPendingClients%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataToNotify%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataLinkedPaths%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataHasPaths%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataCompoundStorage%3B%2F**%20%40type%20%7BPolymer_PropertyEffects%7D%20*%2F_this.__dataHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataTemp%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsInitialized%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__data%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataPending%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataOld%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__computeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__reflectEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__notifyEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__propagateEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__observeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__readOnly%3B%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2F_this.__templateInfo%3Breturn%20_this%3B%7D_createClass(PropertyEffects%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3BhostStack.registerHost(this)%3Bthis.__dataClientsReady%3Dfalse%3Bthis.__dataPendingClients%3Dnull%3Bthis.__dataToNotify%3Dnull%3Bthis.__dataLinkedPaths%3Dnull%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20May%20be%20set%20on%20instance%20prior%20to%20upgrade%0Athis.__dataCompoundStorage%3Dthis.__dataCompoundStorage%7C%7Cnull%3Bthis.__dataHost%3Dthis.__dataHost%7C%7Cnull%3Bthis.__dataTemp%3D%7B%7D%3Bthis.__dataClientsInitialized%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20provide%20a%0A%20%20%20%20%20%20%20*%20more%20efficient%20implementation%20of%20initializing%20properties%20from%0A%20%20%20%20%20%20%20*%20the%20prototype%20on%20the%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bthis.__data%3DObject.create(props)%3Bthis.__dataPending%3DObject.create(props)%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20avoid%20setting%0A%20%20%20%20%20%20%20*%20%60_setProperty%60's%20%60shouldNotify%3A%20true%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20instance%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7Bvar%20readOnly%3Dthis%5BTYPES.READ_ONLY%5D%3Bfor(var%20prop%20in%20props)%7Bif(!readOnly%7C%7C!readOnly%5Bprop%5D)%7Bthis.__dataPending%3Dthis.__dataPending%7C%7C%7B%7D%3Bthis.__dataOld%3Dthis.__dataOld%7C%7C%7B%7D%3Bthis.__data%5Bprop%5D%3Dthis.__dataPending%5Bprop%5D%3Dprops%5Bprop%5D%3B%7D%7D%7D%2F%2F%20Prototype%20setup%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60addPropertyEffect%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyEffect'%2Cvalue%3Afunction%20_addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis._createPropertyAccessor(property%2Ctype%3D%3DTYPES.READ_ONLY)%3B%2F%2F%20effects%20are%20accumulated%20into%20arrays%20per%20property%20based%20on%20type%0Avar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bif(!effects)%7Beffects%3Dthis%5Btype%5D%5Bproperty%5D%3D%5B%5D%3B%7Deffects.push(effect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20the%20given%20property%20effect.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20the%20effect%20was%20associated%20with%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removePropertyEffect'%2Cvalue%3Afunction%20_removePropertyEffect(property%2Ctype%2Ceffect)%7Bvar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bvar%20idx%3Deffects.indexOf(effect)%3Bif(idx%3E%3D0)%7Beffects.splice(idx%2C1)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20property%20effect%0A%20%20%20%20%20%20%20*%20of%20a%20certain%20type.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasPropertyEffect'%2Cvalue%3Afunction%20_hasPropertyEffect(property%2Ctype)%7Bvar%20effects%3Dthis%5Btype%5D%3Breturn%20Boolean(effects%26%26effects%5Bproperty%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22read%20only%22%0A%20%20%20%20%20%20%20*%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReadOnlyEffect'%2Cvalue%3Afunction%20_hasReadOnlyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.READ_ONLY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22notify%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasNotifyEffect'%2Cvalue%3Afunction%20_hasNotifyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.NOTIFY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22reflect%20to%20attribute%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReflectEffect'%2Cvalue%3Afunction%20_hasReflectEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.REFLECT)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22computed%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasComputedEffect'%2Cvalue%3Afunction%20_hasComputedEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.COMPUTE)%3B%7D%2F%2F%20Runtime%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20pending%20property%20or%20path.%20%20If%20the%20root%20property%20of%20the%20path%20in%0A%20%20%20%20%20%20%20*%20question%20had%20no%20accessor%2C%20the%20path%20is%20set%2C%20otherwise%20it%20is%20enqueued%0A%20%20%20%20%20%20%20*%20via%20%60_setPendingProperty%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20isolates%20relatively%20expensive%20functionality%20necessary%0A%20%20%20%20%20%20%20*%20for%20the%20public%20API%20(%60set%60%2C%20%60setProperties%60%2C%20%60notifyPath%60%2C%20and%20property%0A%20%20%20%20%20%20%20*%20change%20listeners%20via%20%7B%7B...%7D%7D%20bindings)%2C%20such%20that%20it%20is%20only%20done%0A%20%20%20%20%20%20%20*%20when%20paths%20enter%20the%20system%2C%20and%20not%20at%20every%20propagation%20step.%20%20It%0A%20%20%20%20%20%20%20*%20also%20sets%20a%20%60__dataHasPaths%60%20flag%20on%20the%20instance%20which%20is%20used%20to%0A%20%20%20%20%20%20%20*%20fast-path%20slower%20path-matching%20code%20in%20the%20property%20effects%20host%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60path%60%20can%20be%20a%20path%20string%20or%20array%20of%20path%20parts%20as%20accepted%20by%20the%0A%20%20%20%20%20%20%20*%20public%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20Set%20to%20true%20if%20this%20change%20should%0A%20%20%20%20%20%20%20*%20%20cause%20a%20property%20notification%20event%20dispatch%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20isPathNotification%20If%20the%20path%20being%20set%20is%20a%20path%0A%20%20%20%20%20%20%20*%20%20%20notification%20of%20an%20already%20changed%20value%2C%20as%20opposed%20to%20a%20request%0A%20%20%20%20%20%20%20*%20%20%20to%20set%20and%20notify%20the%20change.%20%20In%20the%20latter%20%60false%60%20case%2C%20a%20dirty%0A%20%20%20%20%20%20%20*%20%20%20check%20is%20performed%20and%20then%20the%20value%20is%20set%20to%20the%20path%20before%0A%20%20%20%20%20%20%20*%20%20%20enqueuing%20the%20pending%20property%20change.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%2Fpath%20was%20enqueued%20in%0A%20%20%20%20%20%20%20*%20%20%20the%20pending%20changes%20bag.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingPropertyOrPath'%2Cvalue%3Afunction%20_setPendingPropertyOrPath(path%2Cvalue%2CshouldNotify%2CisPathNotification)%7Bif(isPathNotification%7C%7CPolymer.Path.root(Array.isArray(path)%3Fpath%5B0%5D%3Apath)!%3D%3Dpath)%7B%2F%2F%20Dirty%20check%20changes%20being%20set%20to%20a%20path%20against%20the%20actual%20object%2C%0A%2F%2F%20since%20this%20is%20the%20entry%20point%20for%20paths%20into%20the%20system%3B%20from%20here%0A%2F%2F%20the%20only%20dirty%20checks%20are%20against%20the%20%60__dataTemp%60%20cache%20to%20prevent%0A%2F%2F%20duplicate%20work%20in%20the%20same%20turn%20only.%20Note%2C%20if%20this%20was%20a%20notification%0A%2F%2F%20of%20a%20change%20already%20set%20to%20a%20path%20(isPathNotification%3A%20true)%2C%0A%2F%2F%20we%20always%20let%20the%20change%20through%20and%20skip%20the%20%60set%60%20since%20it%20was%0A%2F%2F%20already%20dirty%20checked%20at%20the%20point%20of%20entry%20and%20the%20underlying%0A%2F%2F%20object%20has%20already%20been%20updated%0Aif(!isPathNotification)%7Bvar%20old%3DPolymer.Path.get(this%2Cpath)%3Bpath%3D%2F**%20%40type%20%7Bstring%7D%20*%2FPolymer.Path.set(this%2Cpath%2Cvalue)%3B%2F%2F%20Use%20property-accessor's%20simpler%20dirty%20check%0Aif(!path%7C%7C!_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_shouldPropertyChange'%2Cthis).call(this%2Cpath%2Cvalue%2Cold))%7Breturn%20false%3B%7D%7Dthis.__dataHasPaths%3Dtrue%3Bif(this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify))%7BcomputeLinkedPaths(this%2Cpath%2Cvalue)%3Breturn%20true%3B%7D%7Delse%7Bif(this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bpath%5D)%7Breturn%20this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify)%3B%7Delse%7Bthis%5Bpath%5D%3Dvalue%3B%7D%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Applies%20a%20value%20to%20a%20non-Polymer%20element%2Fnode's%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20implementation%20makes%20a%20best-effort%20at%20binding%20interop%3A%0A%20%20%20%20%20%20%20*%20Some%20native%20element%20properties%20have%20side-effects%20when%0A%20%20%20%20%20%20%20*%20re-setting%20the%20same%20value%20(e.g.%20setting%20%60%3Cinput%3E.value%60%20resets%20the%0A%20%20%20%20%20%20%20*%20cursor%20position)%2C%20so%20we%20do%20a%20dirty-check%20before%20setting%20the%20value.%0A%20%20%20%20%20%20%20*%20However%2C%20for%20better%20interop%20with%20non-Polymer%20custom%20elements%20that%0A%20%20%20%20%20%20%20*%20accept%20objects%2C%20we%20explicitly%20re-set%20object%20changes%20coming%20from%20the%0A%20%20%20%20%20%20%20*%20Polymer%20world%20(which%20may%20include%20deep%20object%20changes%20without%20the%0A%20%20%20%20%20%20%20*%20top%20reference%20changing)%2C%20erring%20on%20the%20side%20of%20providing%20more%0A%20%20%20%20%20%20%20*%20information.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20provide%20alternate%20approaches.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7B%2F%2F%20It%20is%20a%20judgment%20call%20that%20resetting%20primitives%20is%0A%2F%2F%20%22bad%22%20and%20resettings%20objects%20is%20also%20%22good%22%3B%20alternatively%20we%20could%0A%2F%2F%20implement%20a%20whitelist%20of%20tag%20%26%20property%20values%20that%20should%20never%0A%2F%2F%20be%20reset%20(e.g.%20%3Cinput%3E.value%20%26%26%20%3Cselect%3E.value)%0Aif(value!%3D%3Dnode%5Bprop%5D%7C%7C(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D'object')%7Bnode%5Bprop%5D%3Dvalue%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20%60PropertiesChanged%60%20implementation%20to%20introduce%20special%0A%20%20%20%20%20%20%20*%20dirty%20check%20logic%20depending%20on%20the%20property%20%26%20value%20being%20set%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20Any%20value%20set%20to%20a%20path%20(e.g.%20'obj.prop'%3A%2042%20or%20'obj.prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%2C%20dirty%20checked%20against%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%202.%20Object%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%20and%20%60__data%60%2C%20dirty%20checked%20against%0A%20%20%20%20%20%20%20*%20%20%20%20%60__dataTemp%60%20by%20default%20implementation%20of%20%60_shouldPropertyChange%60%0A%20%20%20%20%20%20%20*%203.%20Primitive%20value%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%2042)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__data%60%2C%20dirty%20checked%20against%20%60__data%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20dirty-check%20is%20important%20to%20prevent%20cycles%20due%20to%20two-way%0A%20%20%20%20%20%20%20*%20notification%2C%20but%20paths%20and%20objects%20are%20only%20dirty%20checked%20against%20any%0A%20%20%20%20%20%20%20*%20previous%20value%20set%20during%20this%20turn%20via%20a%20%22temporary%20cache%22%20that%20is%0A%20%20%20%20%20%20%20*%20cleared%20when%20the%20last%20%60_propertiesChanged%60%20exits.%20This%20is%20so%3A%0A%20%20%20%20%20%20%20*%20a.%20any%20cached%20array%20paths%20(e.g.%20'array.3.prop')%20may%20be%20invalidated%0A%20%20%20%20%20%20%20*%20%20%20%20due%20to%20array%20mutations%20like%20shift%2Funshift%2Fsplice%3B%20this%20is%20fine%0A%20%20%20%20%20%20%20*%20%20%20%20since%20path%20changes%20are%20dirty-checked%20at%20user%20entry%20points%20like%20%60set%60%0A%20%20%20%20%20%20%20*%20b.%20dirty-checking%20for%20objects%20only%20lasts%20one%20turn%20to%20allow%20the%20user%0A%20%20%20%20%20%20%20*%20%20%20%20to%20mutate%20the%20object%20in-place%20and%20re-set%20it%20with%20the%20same%20identity%0A%20%20%20%20%20%20%20*%20%20%20%20and%20have%20all%20sub-properties%20re-propagated%20in%20a%20subsequent%20turn.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20temp%20cache%20is%20not%20necessarily%20sufficient%20to%20prevent%20invalid%20array%0A%20%20%20%20%20%20%20*%20paths%2C%20since%20a%20splice%20can%20happen%20during%20the%20same%20turn%20(with%20pathological%0A%20%20%20%20%20%20%20*%20user%20code)%3B%20we%20could%20introduce%20a%20%22fixup%22%20for%20temporarily%20cached%20array%0A%20%20%20%20%20%20%20*%20paths%20if%20needed%3A%20https%3A%2F%2Fgithub.com%2FPolymer%2Fpolymer%2Fissues%2F4227%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20True%20if%20property%20should%20fire%20notification%0A%20%20%20%20%20%20%20*%20%20%20event%20(applies%20only%20for%20%60notify%3A%20true%60%20properties)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2CshouldNotify)%7Bvar%20isPath%3Dthis.__dataHasPaths%26%26Polymer.Path.isPath(property)%3Bvar%20prevProps%3DisPath%3Fthis.__dataTemp%3Athis.__data%3Bif(this._shouldPropertyChange(property%2Cvalue%2CprevProps%5Bproperty%5D))%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dthis.__data%5Bproperty%5D%3B%7D%2F%2F%20Paths%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%20turn)%2C%0A%2F%2F%20which%20is%20used%20for%20dirty-checking%2C%20all%20others%20stored%20in%20__data%0Aif(isPath)%7Bthis.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Delse%7Bthis.__data%5Bproperty%5D%3Dvalue%3B%7D%2F%2F%20All%20changes%20go%20into%20pending%20property%20bag%2C%20passed%20to%20_propertiesChanged%0Athis.__dataPending%5Bproperty%5D%3Dvalue%3B%2F%2F%20Track%20properties%20that%20should%20notify%20separately%0Aif(isPath%7C%7Cthis%5BTYPES.NOTIFY%5D%26%26this%5BTYPES.NOTIFY%5D%5Bproperty%5D)%7Bthis.__dataToNotify%3Dthis.__dataToNotify%7C%7C%7B%7D%3Bthis.__dataToNotify%5Bproperty%5D%3DshouldNotify%3B%7Dreturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20base%20implementation%20to%20ensure%20all%20accessors%20set%20%60shouldNotify%60%0A%20%20%20%20%20%20%20*%20to%20true%2C%20for%20per-property%20notification%20tracking.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessor%60's%20default%20async%20queuing%20of%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%3A%20if%20%60__dataReady%60%20is%20false%20(has%20not%20yet%20been%0A%20%20%20%20%20%20%20*%20manually%20flushed)%2C%20the%20function%20no-ops%3B%20otherwise%20flushes%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20synchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bif(this.__dataReady)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20the%20given%20client%20on%20a%20list%20of%20pending%20clients%2C%20whose%0A%20%20%20%20%20%20%20*%20pending%20property%20changes%20can%20later%20be%20flushed%20via%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60_flushClients%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20client%20PropertyEffects%20client%20to%20enqueue%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enqueueClient'%2Cvalue%3Afunction%20_enqueueClient(client)%7Bthis.__dataPendingClients%3Dthis.__dataPendingClients%7C%7C%5B%5D%3Bif(client!%3D%3Dthis)%7Bthis.__dataPendingClients.push(client)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20superclass%20implementation.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bthis.__dataCounter%2B%2B%3B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_flushProperties'%2Cthis).call(this)%3Bthis.__dataCounter--%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Flushes%20any%20clients%20previously%20enqueued%20via%20%60_enqueueClient%60%2C%20causing%0A%20%20%20%20%20%20%20*%20their%20%60_flushProperties%60%20method%20to%20run.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushClients'%2Cvalue%3Afunction%20_flushClients()%7Bif(!this.__dataClientsReady)%7Bthis.__dataClientsReady%3Dtrue%3Bthis._readyClients()%3B%2F%2F%20Override%20point%20where%20accessors%20are%20turned%20on%3B%20importantly%2C%0A%2F%2F%20this%20is%20after%20clients%20have%20fully%20readied%2C%20providing%20a%20guarantee%0A%2F%2F%20that%20any%20property%20effects%20occur%20only%20after%20all%20clients%20are%20ready.%0Athis.__dataReady%3Dtrue%3B%7Delse%7Bthis.__enableOrFlushClients()%3B%7D%7D%2F%2F%20NOTE%3A%20We%20ensure%20clients%20either%20enable%20or%20flush%20as%20appropriate.%20This%0A%2F%2F%20handles%20two%20corner%20cases%3A%0A%2F%2F%20(1)%20clients%20flush%20properly%20when%20connected%2Fenabled%20before%20the%20host%0A%2F%2F%20enables%3B%20e.g.%0A%2F%2F%20%20%20(a)%20Templatize%20stamps%20with%20no%20properties%20and%20does%20not%20flush%20and%0A%2F%2F%20%20%20(b)%20the%20instance%20is%20inserted%20into%20dom%20and%0A%2F%2F%20%20%20(c)%20then%20the%20instance%20flushes.%0A%2F%2F%20(2)%20clients%20enable%20properly%20when%20not%20connected%2Fenabled%20when%20the%20host%0A%2F%2F%20flushes%3B%20e.g.%0A%2F%2F%20%20%20(a)%20a%20template%20is%20runtime%20stamped%20and%20not%20yet%20connected%2Fenabled%0A%2F%2F%20%20%20(b)%20a%20host%20sets%20a%20property%2C%20causing%20stamped%20dom%20to%20flush%0A%2F%2F%20%20%20(c)%20the%20stamped%20dom%20enables.%0A%7D%2C%7Bkey%3A'__enableOrFlushClients'%2Cvalue%3Afunction%20__enableOrFlushClients()%7Bvar%20clients%3Dthis.__dataPendingClients%3Bif(clients)%7Bthis.__dataPendingClients%3Dnull%3Bfor(var%20i%3D0%3Bi%3Cclients.length%3Bi%2B%2B)%7Bvar%20client%3Dclients%5Bi%5D%3Bif(!client.__dataEnabled)%7Bclient._enableProperties()%3B%7Delse%20if(client.__dataPending)%7Bclient._flushProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Perform%20any%20initial%20setup%20on%20client%20dom.%20Called%20before%20the%20first%0A%20%20%20%20%20%20%20*%20%60_flushProperties%60%20call%20on%20client%20dom%20and%20before%20any%20element%0A%20%20%20%20%20%20%20*%20observers%20are%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bthis.__enableOrFlushClients()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20bag%20of%20property%20changes%20to%20this%20instance%2C%20and%0A%20%20%20%20%20%20%20*%20synchronously%20processes%20all%20effects%20of%20the%20properties%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Property%20names%20must%20be%20simple%20properties%2C%20not%20paths.%20%20Batched%0A%20%20%20%20%20%20%20*%20path%20propagation%20is%20not%20supported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20one%20or%20more%20key-value%20pairs%20whose%20key%20is%0A%20%20%20%20%20%20%20*%20%20%20a%20property%20and%20value%20is%20the%20new%20value%20to%20set%20for%20that%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setReadOnly%20When%20true%2C%20any%20private%20values%20set%20in%0A%20%20%20%20%20%20%20*%20%20%20%60props%60%20will%20be%20set.%20By%20default%2C%20%60setProperties%60%20will%20not%20set%0A%20%20%20%20%20%20%20*%20%20%20%60readOnly%3A%20true%60%20root%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setProperties'%2Cvalue%3Afunction%20setProperties(props%2CsetReadOnly)%7Bfor(var%20path%20in%20props)%7Bif(setReadOnly%7C%7C!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5Bpath%5D)%7B%2F%2FTODO(kschaaf)%3A%20explicitly%20disallow%20paths%20in%20setProperty%3F%0A%2F%2F%20wildcard%20observers%20currently%20only%20pass%20the%20first%20changed%20path%0A%2F%2F%20in%20the%20%60info%60%20object%2C%20and%20you%20could%20do%20some%20odd%20things%20batching%0A%2F%2F%20paths%2C%20e.g.%20%7B'foo.bar'%3A%20%7B...%7D%2C%20'foo'%3A%20null%7D%0Athis._setPendingPropertyOrPath(path%2Cprops%5Bpath%5D%2Ctrue)%3B%7D%7Dthis._invalidateProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20so%20that%20property%20accessor%0A%20%20%20%20%20%20%20*%20side%20effects%20are%20not%20enabled%20until%20after%20client%20dom%20is%20fully%20ready.%0A%20%20%20%20%20%20%20*%20Also%20calls%20%60_flushClients%60%20callback%20to%20ensure%20client%20dom%20is%20enabled%0A%20%20%20%20%20%20%20*%20that%20was%20not%20enabled%20as%20a%20result%20of%20flushing%20properties.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B%2F%2F%20It%20is%20important%20that%20%60super.ready()%60%20is%20not%20called%20here%20as%20it%0A%2F%2F%20immediately%20turns%20on%20accessors.%20Instead%2C%20we%20wait%20until%20%60readyClients%60%0A%2F%2F%20to%20enable%20accessors%20to%20provide%20a%20guarantee%20that%20clients%20are%20ready%0A%2F%2F%20before%20processing%20any%20accessors%20side%20effects.%0Athis._flushProperties()%3B%2F%2F%20If%20no%20data%20was%20pending%2C%20%60_flushProperties%60%20will%20not%20%60flushClients%60%0A%2F%2F%20so%20ensure%20this%20is%20done.%0Aif(!this.__dataClientsReady)%7Bthis._flushClients()%3B%7D%2F%2F%20Before%20ready%2C%20client%20notifications%20do%20not%20trigger%20_flushProperties.%0A%2F%2F%20Therefore%20a%20flush%20is%20necessary%20here%20if%20data%20has%20been%20set.%0Aif(this.__dataPending)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyAccessors%60's%20properties%20changed%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Runs%20each%20class%20of%20effects%20for%20the%20batch%20of%20changed%20properties%20in%0A%20%20%20%20%20%20%20*%20a%20specific%20order%20(compute%2C%20propagate%2C%20reflect%2C%20observe%2C%20notify).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20----------------------------%0A%2F%2F%20let%20c%20%3D%20Object.getOwnPropertyNames(changedProps%20%7C%7C%20%7B%7D)%3B%0A%2F%2F%20window.debug%20%26%26%20console.group(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20if%20(window.debug)%20%7B%20debugger%3B%20%7D%0A%2F%2F%20----------------------------%0Avar%20hasPaths%3Dthis.__dataHasPaths%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20Compute%20properties%0ArunComputedEffects(this%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Clear%20notify%20properties%20prior%20to%20possible%20reentry%20(propagate%2C%20observe)%2C%0A%2F%2F%20but%20after%20computing%20effects%20have%20a%20chance%20to%20add%20to%20them%0Avar%20notifyProps%3Dthis.__dataToNotify%3Bthis.__dataToNotify%3Dnull%3B%2F%2F%20Propagate%20properties%20to%20clients%0Athis._propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Flush%20clients%0Athis._flushClients()%3B%2F%2F%20Reflect%20properties%0ArunEffects(this%2Cthis%5BTYPES.REFLECT%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Observe%20properties%0ArunEffects(this%2Cthis%5BTYPES.OBSERVE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Notify%20properties%20to%20host%0Aif(notifyProps)%7BrunNotifyEffects(this%2CnotifyProps%2CchangedProps%2ColdProps%2ChasPaths)%3B%7D%2F%2F%20Clear%20temporary%20cache%20at%20end%20of%20turn%0Aif(this.__dataCounter%3D%3D1)%7Bthis.__dataTemp%3D%7B%7D%3B%7D%2F%2F%20----------------------------%0A%2F%2F%20window.debug%20%26%26%20console.groupEnd(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20----------------------------%0A%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20propagate%20any%20property%20changes%20to%20stamped%20template%20nodes%0A%20%20%20%20%20%20%20*%20managed%20by%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propagatePropertyChanges'%2Cvalue%3Afunction%20_propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%7Bif(this%5BTYPES.PROPAGATE%5D)%7BrunEffects(this%2Cthis%5BTYPES.PROPAGATE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%7Dvar%20templateInfo%3Dthis.__templateInfo%3Bwhile(templateInfo)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2CchangedProps%2ColdProps%2ChasPaths%2CtemplateInfo.nodeList)%3BtemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Aliases%20one%20data%20path%20as%20another%2C%20such%20that%20path%20notifications%20from%20one%0A%20%20%20%20%20%20%20*%20are%20routed%20to%20the%20other.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20to%20Target%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20from%20Source%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'linkPaths'%2Cvalue%3Afunction%20linkPaths(to%2Cfrom)%7Bto%3DPolymer.Path.normalize(to)%3Bfrom%3DPolymer.Path.normalize(from)%3Bthis.__dataLinkedPaths%3Dthis.__dataLinkedPaths%7C%7C%7B%7D%3Bthis.__dataLinkedPaths%5Bto%5D%3Dfrom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20a%20data%20path%20alias%20previously%20established%20with%20%60_linkPaths%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20the%20path%20to%20unlink%20should%20be%20the%20target%20(%60to%60)%20used%20when%0A%20%20%20%20%20%20%20*%20linking%20the%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Target%20path%20to%20unlink.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlinkPaths'%2Cvalue%3Afunction%20unlinkPaths(path)%7Bpath%3DPolymer.Path.normalize(path)%3Bif(this.__dataLinkedPaths)%7Bdelete%20this.__dataLinkedPaths%5Bpath%5D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20an%20array%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items%20%3D%20%5B%20%7Bname%3A%20'Jim'%7D%2C%20%7Bname%3A%20'Todd'%7D%2C%20%7Bname%3A%20'Bill'%7D%20%5D%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.splice(1%2C%201%2C%20%7Bname%3A%20'Sam'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.push(%7Bname%3A%20'Bob'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifySplices('items'%2C%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%201%2C%20removed%3A%20%5B%7Bname%3A%20'Todd'%7D%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%203%2C%20removed%3A%20%5B%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D)%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%20indicating%20ordered%0A%20%20%20%20%20%20%20*%20%20%20changes%20that%20occurred%20to%20the%20array.%20Each%20record%20should%20have%20the%0A%20%20%20%20%20%20%20*%20%20%20following%20fields%3A%0A%20%20%20%20%20%20%20*%20%20%20%20*%20index%3A%20index%20at%20which%20the%20change%20occurred%0A%20%20%20%20%20%20%20*%20%20%20%20*%20removed%3A%20array%20of%20items%20that%20were%20removed%20from%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20addedCount%3A%20number%20of%20new%20items%20added%20at%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20object%3A%20a%20reference%20to%20the%20array%20in%20question%0A%20%20%20%20%20%20%20*%20%20%20%20*%20type%3A%20the%20string%20literal%20'splice'%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20Note%20that%20splice%20records%20_must_%20be%20normalized%20such%20that%20they%20are%0A%20%20%20%20%20%20%20*%20%20%20reported%20in%20index%20order%20(raw%20results%20from%20%60Object.observe%60%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20ordered%20and%20must%20be%20normalized%2Fmerged%20before%20notifying).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifySplices'%2Cvalue%3Afunction%20notifySplices(path%2Csplices)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B_notifySplices(this%2Carray%2Cinfo.path%2Csplices)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20reading%20a%20value%20from%20a%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20is%20undefined%2C%20this%20method%20returns%0A%20%20%20%20%20%20%20*%20%60undefined%60%20(this%20method%20does%20not%20throw%20when%20dereferencing%20undefined%0A%20%20%20%20%20%20%20*%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20read.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60foo.bar.baz%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60users.12.name%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20the%20path%2C%20or%20%60undefined%60%20if%20any%20part%20of%20the%20path%0A%20%20%20%20%20%20%20*%20%20%20is%20undefined.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'get'%2Cvalue%3Afunction%20get(path%2Croot)%7Breturn%20Polymer.Path.get(root%7C%7Cthis%2Cpath)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20setting%20a%20value%20to%20a%20path%20and%20notifying%20any%0A%20%20%20%20%20%20%20*%20elements%20bound%20to%20the%20same%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20except%20for%20the%20last%20is%20undefined%2C%0A%20%20%20%20%20%20%20*%20this%20method%20does%20nothing%20(this%20method%20does%20not%20throw%20when%0A%20%20%20%20%20%20%20*%20dereferencing%20undefined%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20write.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60'foo.bar.baz'%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60'users.12.name'%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20at%20the%20specified%20path.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%20%20When%20specified%2C%20no%20notification%20will%20occur.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'set'%2Cvalue%3Afunction%20set(path%2Cvalue%2Croot)%7Bif(root)%7BPolymer.Path.set(root%2Cpath%2Cvalue)%3B%7Delse%7Bif(!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5B%2F**%20%40type%20%7Bstring%7D%20*%2Fpath%5D)%7Bif(this._setPendingPropertyOrPath(path%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20end%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20push%20onto%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'push'%2Cvalue%3Afunction%20push(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20len%3Darray.length%3Bfor(var%20_len%3Darguments.length%2Citems%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bitems%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dvar%20ret%3Darray.push.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Clen%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20end%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'pop'%2Cvalue%3Afunction%20pop(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.pop()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2Carray.length%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Starting%20from%20the%20start%20index%20specified%2C%20removes%200%20or%20more%20items%0A%20%20%20%20%20%20%20*%20from%20the%20array%20and%20inserts%200%20or%20more%20new%20items%20in%20their%20place.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.splice%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20start%20Index%20from%20which%20to%20start%20removing%2Finserting.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20deleteCount%20Number%20of%20items%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20into%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20of%20removed%20items.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'splice'%2Cvalue%3Afunction%20splice(path%2Cstart%2CdeleteCount)%7Bfor(var%20_len2%3Darguments.length%2Citems%3DArray(_len2%3E3%3F_len2-3%3A0)%2C_key2%3D3%3B_key2%3C_len2%3B_key2%2B%2B)%7Bitems%5B_key2-3%5D%3Darguments%5B_key2%5D%3B%7Dvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B%2F%2F%20Normalize%20fancy%20native%20splice%20handling%20of%20crazy%20start%20values%0Aif(start%3C0)%7Bstart%3Darray.length-Math.floor(-start)%3B%7Delse%20if(start)%7Bstart%3DMath.floor(start)%3B%7D%2F%2F%20array.splice%20does%20different%20things%20based%20on%20the%20number%20of%20arguments%0A%2F%2F%20you%20pass%20in.%20Therefore%2C%20array.splice(0)%20and%20array.splice(0%2C%20undefined)%0A%2F%2F%20do%20different%20things.%20In%20the%20former%2C%20the%20whole%20array%20is%20cleared.%20In%20the%0A%2F%2F%20latter%2C%20no%20items%20are%20removed.%0A%2F%2F%20This%20means%20that%20we%20need%20to%20detect%20whether%201.%20one%20of%20the%20arguments%0A%2F%2F%20is%20actually%20passed%20in%20and%20then%202.%20determine%20how%20many%20arguments%0A%2F%2F%20we%20should%20pass%20on%20to%20the%20native%20array.splice%0A%2F%2F%0Avar%20ret%3Dvoid%200%3B%2F%2F%20Omit%20any%20additional%20arguments%20if%20they%20were%20not%20passed%20in%0Aif(arguments.length%3D%3D%3D2)%7Bret%3Darray.splice(start)%3B%2F%2F%20Either%20start%20was%20undefined%20and%20the%20others%20were%20defined%2C%20but%20in%20this%0A%2F%2F%20case%20we%20can%20safely%20pass%20on%20all%20arguments%0A%2F%2F%0A%2F%2F%20Note%3A%20this%20includes%20the%20case%20where%20none%20of%20the%20arguments%20were%20passed%20in%2C%0A%2F%2F%20e.g.%20this.splice('array').%20However%2C%20if%20both%20start%20and%20deleteCount%0A%2F%2F%20are%20undefined%2C%20array.splice%20will%20not%20modify%20the%20array%20(as%20expected)%0A%7Delse%7Bret%3Darray.splice.apply(array%2C%5Bstart%2CdeleteCount%5D.concat(items))%3B%7D%2F%2F%20At%20the%20end%2C%20check%20whether%20any%20items%20were%20passed%20in%20(e.g.%20insertions)%0A%2F%2F%20or%20if%20the%20return%20array%20contains%20items%20(e.g.%20deletions).%0A%2F%2F%20Only%20notify%20if%20items%20were%20added%20or%20deleted.%0Aif(items.length%7C%7Cret.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Cstart%2Citems.length%2Cret)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20beginning%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'shift'%2Cvalue%3Afunction%20shift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.shift()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20beginning%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20info%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unshift'%2Cvalue%3Afunction%20unshift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bfor(var%20_len3%3Darguments.length%2Citems%3DArray(_len3%3E1%3F_len3-1%3A0)%2C_key3%3D1%3B_key3%3C_len3%3B_key3%2B%2B)%7Bitems%5B_key3-1%5D%3Darguments%5B_key3%5D%3B%7Dvar%20ret%3Darray.unshift.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20a%20path%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.item.user.name%20%3D%20'Bob'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifyPath('item.user.name')%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Value%20at%20the%20path%20(optional).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyPath'%2Cvalue%3Afunction%20notifyPath(path%2Cvalue)%7B%2F**%20%40type%20%7Bstring%7D%20*%2Fvar%20propPath%3Dvoid%200%3Bif(arguments.length%3D%3D1)%7B%2F%2F%20Get%20value%20if%20not%20supplied%0Avar%20info%3D%7Bpath%3A''%7D%3Bvalue%3DPolymer.Path.get(this%2Cpath%2Cinfo)%3BpropPath%3Dinfo.path%3B%7Delse%20if(Array.isArray(path))%7B%2F%2F%20Normalize%20path%20if%20needed%0ApropPath%3DPolymer.Path.normalize(path)%3B%7Delse%7BpropPath%3D%2F**%20%40type%7Bstring%7D%20*%2Fpath%3B%7Dif(this._setPendingPropertyOrPath(propPath%2Cvalue%2Ctrue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReadOnlyProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReadOnlyProperty'%2Cvalue%3Afunction%20_createReadOnlyProperty(property%2CprotectedSetter)%7Bthis._addPropertyEffect(property%2CTYPES.READ_ONLY)%3Bif(protectedSetter)%7Bthis%5B'_set'%2Bupper(property)%5D%3D%2F**%20%40this%20%7BPropertyEffects%7D%20*%2Ffunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createPropertyObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createPropertyObserver'%2Cvalue%3Afunction%20_createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bvar%20info%3D%7Bproperty%3Aproperty%2Cmethod%3Amethod%2CdynamicFn%3ABoolean(dynamicFn)%7D%3Bthis._addPropertyEffect(property%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Aproperty%7D%7D)%3Bif(dynamicFn)%7Bthis._addPropertyEffect(%2F**%20%40type%20%7Bstring%7D%20*%2Fmethod%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Amethod%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createMethodObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createMethodObserver'%2Cvalue%3Afunction%20_createMethodObserver(expression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20observer%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.OBSERVE%2CrunMethodEffect%2Cnull%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createNotifyingProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createNotifyingProperty'%2Cvalue%3Afunction%20_createNotifyingProperty(property)%7Bthis._addPropertyEffect(property%2CTYPES.NOTIFY%2C%7Bfn%3ArunNotifyEffect%2Cinfo%3A%7BeventName%3ACaseMap.camelToDashCase(property)%2B'-changed'%2Cproperty%3Aproperty%7D%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReflectedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReflectedProperty'%2Cvalue%3Afunction%20_createReflectedProperty(property)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bif(attr%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Property%20'%2Bproperty%2B'%20cannot%20be%20reflected%20to%20attribute%20'%2Battr%2B'%20because%20%22-%22%20is%20not%20a%20valid%20starting%20attribute%20name.%20Use%20a%20lowercase%20first%20letter%20for%20the%20property%20instead.')%3B%7Delse%7Bthis._addPropertyEffect(property%2CTYPES.REFLECT%2C%7Bfn%3ArunReflectEffect%2Cinfo%3A%7BattrName%3Aattr%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createComputedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createComputedProperty'%2Cvalue%3Afunction%20_createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20computed%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.COMPUTE%2CrunComputedEffect%2Cproperty%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20the%20argument%20values%20for%20a%20method%20specified%20in%20the%20provided%20array%0A%20%20%20%20%20%20%20*%20of%20argument%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60path%60%20and%20%60value%60%20arguments%20are%20used%20to%20fill%20in%20wildcard%20descriptor%0A%20%20%20%20%20%20%20*%20when%20the%20method%20is%20being%20called%20as%20a%20result%20of%20a%20path%20notification.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Array%3C!MethodArg%3E%7D%20args%20Array%20of%20argument%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20name%20that%20triggered%20the%20method%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C*%3E%7D%20Array%20of%20argument%20values%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_marshalArgs'%2Cvalue%3Afunction%20_marshalArgs(args%2Cpath%2Cprops)%7Bvar%20data%3Dthis.__data%3Bvar%20values%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dargs.length%3Bi%3Cl%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bvar%20name%3Darg.name%3Bvar%20v%3Dvoid%200%3Bif(arg.literal)%7Bv%3Darg.value%3B%7Delse%7Bif(arg.structured)%7Bv%3DPolymer.Path.get(data%2Cname)%3B%2F%2F%20when%20data%20is%20not%20stored%20e.g.%20%60splices%60%0Aif(v%3D%3D%3Dundefined)%7Bv%3Dprops%5Bname%5D%3B%7D%7Delse%7Bv%3Ddata%5Bname%5D%3B%7D%7Dif(arg.wildcard)%7B%2F%2F%20Only%20send%20the%20actual%20path%20changed%20info%20if%20the%20change%20that%0A%2F%2F%20caused%20the%20observer%20to%20run%20matched%20the%20wildcard%0Avar%20baseChanged%3Dname.indexOf(path%2B'.')%3D%3D%3D0%3Bvar%20matches%3Dpath.indexOf(name)%3D%3D%3D0%26%26!baseChanged%3Bvalues%5Bi%5D%3D%7Bpath%3Amatches%3Fpath%3Aname%2Cvalue%3Amatches%3Fprops%5Bpath%5D%3Av%2Cbase%3Av%7D%3B%7Delse%7Bvalues%5Bi%5D%3Dv%3B%7D%7Dreturn%20values%3B%7D%2F%2F%20--%20static%20class%20methods%20------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20accessor%20exists%20for%20the%20specified%20property%2C%20and%20adds%0A%20%20%20%20%20%20%20*%20to%20a%20list%20of%20%22property%20effects%22%20that%20will%20run%20when%20the%20accessor%20for%0A%20%20%20%20%20%20%20*%20the%20specified%20property%20is%20set.%20%20Effects%20are%20grouped%20by%20%22type%22%2C%20which%0A%20%20%20%20%20%20%20*%20roughly%20corresponds%20to%20a%20phase%20in%20effect%20processing.%20%20The%20effect%0A%20%20%20%20%20%20%20*%20metadata%20should%20be%20in%20the%20following%20form%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20fn%3A%20effectFunction%2C%20%2F%2F%20Reference%20to%20function%20to%20call%20to%20perform%20effect%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20info%3A%20%7B%20...%20%7D%20%20%20%20%20%20%20%2F%2F%20Effect%20metadata%20passed%20to%20function%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20trigger%3A%20%7B%20%20%20%20%20%20%20%20%20%20%2F%2F%20Optional%20triggering%20metadata%3B%20if%20not%20provided%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20name%3A%20string%20%20%20%20%20%20%2F%2F%20the%20property%20is%20treated%20as%20a%20wildcard%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20structured%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20wildcard%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effects%20are%20called%20from%20%60_propertiesChanged%60%20in%20the%20following%20order%20by%0A%20%20%20%20%20%20%20*%20type%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20COMPUTE%0A%20%20%20%20%20%20%20*%202.%20PROPAGATE%0A%20%20%20%20%20%20%20*%203.%20REFLECT%0A%20%20%20%20%20%20%20*%204.%20OBSERVE%0A%20%20%20%20%20%20%20*%205.%20NOTIFY%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effect%20functions%20are%20called%20with%20the%20following%20signature%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20effectFunction(inst%2C%20path%2C%20props%2C%20oldProps%2C%20info%2C%20hasPaths)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_bindTemplate'%2C%2F%2F%20--%20binding%20----------------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60bindTemplate%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20the%20prototype%20(for%20prototypical%20template%0A%20%20%20%20%20%20%20*%20binding%2C%20to%20avoid%20creating%20accessors%20every%20instance)%20once%20per%20prototype%2C%0A%20%20%20%20%20%20%20*%20and%20will%20be%20called%20with%20%60runtimeBinding%3A%20true%60%20by%20%60_stampTemplate%60%20to%0A%20%20%20%20%20%20%20*%20create%20and%20link%20an%20instance%20of%20the%20template%20metadata%20associated%20with%20a%0A%20%20%20%20%20%20%20*%20particular%20stamping.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20instanceBinding%20When%20false%20(default)%2C%20performs%0A%20%20%20%20%20%20%20*%20%20%20%22prototypical%22%20binding%20of%20the%20template%20and%20overwrites%20any%20previously%0A%20%20%20%20%20%20%20*%20%20%20bound%20template%20for%20the%20class.%20When%20true%20(as%20passed%20from%0A%20%20%20%20%20%20%20*%20%20%20%60_stampTemplate%60)%2C%20the%20template%20info%20is%20instanced%20and%20linked%20into%0A%20%20%20%20%20%20%20*%20%20%20the%20list%20of%20bound%20templates.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%3B%20for%20%60runtimeBinding%60%2C%0A%20%20%20%20%20%20%20*%20%20%20this%20is%20an%20instance%20of%20the%20prototypical%20template%20info%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_bindTemplate(template%2CinstanceBinding)%7Bvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20wasPreBound%3Dthis.__templateInfo%3D%3DtemplateInfo%3B%2F%2F%20Optimization%3A%20since%20this%20is%20called%20twice%20for%20proto-bound%20templates%2C%0A%2F%2F%20don't%20attempt%20to%20recreate%20accessors%20if%20this%20template%20was%20pre-bound%0Aif(!wasPreBound)%7Bfor(var%20prop%20in%20templateInfo.propertyEffects)%7Bthis._createPropertyAccessor(prop)%3B%7D%7Dif(instanceBinding)%7B%2F%2F%20For%20instance-time%20binding%2C%20create%20instance%20of%20template%20metadata%0A%2F%2F%20and%20link%20into%20list%20of%20templates%20if%20necessary%0AtemplateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2FObject.create(templateInfo)%3BtemplateInfo.wasPreBound%3DwasPreBound%3Bif(!wasPreBound%26%26this.__templateInfo)%7Bvar%20last%3Dthis.__templateInfoLast%7C%7Cthis.__templateInfo%3Bthis.__templateInfoLast%3Dlast.nextTemplateInfo%3DtemplateInfo%3BtemplateInfo.previousTemplateInfo%3Dlast%3Breturn%20templateInfo%3B%7D%7Dreturn%20this.__templateInfo%3DtemplateInfo%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20a%20property%20effect%20to%20the%20given%20template%20metadata%2C%20which%20is%20run%0A%20%20%20%20%20%20%20*%20at%20the%20%22propagate%22%20stage%20of%20%60_propertiesChanged%60%20when%20the%20template%0A%20%20%20%20%20%20%20*%20has%20been%20bound%20to%20the%20element%20via%20%60_bindTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60effect%60%20object%20should%20match%20the%20format%20in%20%60_addPropertyEffect%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Template%20metadata%20to%20add%20effect%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20provided%20template%20and%20performs%20instance-time%20setup%20for%0A%20%20%20%20%20%20%20*%20Polymer%20template%20features%2C%20including%20data%20bindings%2C%20declarative%20event%0A%20%20%20%20%20%20%20*%20listeners%2C%20and%20the%20%60this.%24%60%20map%20of%20%60id%60's%20to%20nodes.%20%20A%20document%20fragment%0A%20%20%20%20%20%20%20*%20is%20returned%20containing%20the%20stamped%20DOM%2C%20ready%20for%20insertion%20into%20the%0A%20%20%20%20%20%20%20*%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20more%20than%20once%3B%20however%20note%20that%20due%20to%0A%20%20%20%20%20%20%20*%20%60shadycss%60%20polyfill%20limitations%2C%20only%20styles%20from%20templates%20prepared%0A%20%20%20%20%20%20%20*%20using%20%60ShadyCSS.prepareTemplate%60%20will%20be%20correctly%20polyfilled%20(scoped%0A%20%20%20%20%20%20%20*%20to%20the%20shadow%20root%20and%20support%20CSS%20custom%20properties)%2C%20and%20note%20that%0A%20%20%20%20%20%20%20*%20%60ShadyCSS.prepareTemplate%60%20may%20only%20be%20called%20once%20per%20element.%20As%20such%2C%0A%20%20%20%20%20%20%20*%20any%20styles%20required%20by%20in%20runtime-stamped%20templates%20must%20be%20included%0A%20%20%20%20%20%20%20*%20in%20the%20main%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Ensures%20that%20created%20dom%20is%20%60_enqueueClient%60'd%20to%20this%20element%20so%0A%2F%2F%20that%20it%20can%20be%20flushed%20on%20next%20call%20to%20%60_flushProperties%60%0AhostStack.beginHosting(this)%3Bvar%20dom%3D_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_stampTemplate'%2Cthis).call(this%2Ctemplate)%3BhostStack.endHosting(this)%3Bvar%20templateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2Fthis._bindTemplate(template%2Ctrue)%3B%2F%2F%20Add%20template-instance-specific%20data%20to%20instanced%20templateInfo%0AtemplateInfo.nodeList%3Ddom.nodeList%3B%2F%2F%20Capture%20child%20nodes%20to%20allow%20unstamping%20of%20non-prototypical%20templates%0Aif(!templateInfo.wasPreBound)%7Bvar%20nodes%3DtemplateInfo.childNodes%3D%5B%5D%3Bfor(var%20n%3Ddom.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bnodes.push(n)%3B%7D%7Ddom.templateInfo%3DtemplateInfo%3B%2F%2F%20Setup%20compound%20storage%2C%202-way%20listeners%2C%20and%20dataHost%20for%20bindings%0AsetupBindings(this%2CtemplateInfo)%3B%2F%2F%20Flush%20properties%20into%20template%20nodes%20if%20already%20booted%0Aif(this.__dataReady)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2Cthis.__data%2Cnull%2Cfalse%2CtemplateInfo.nodeList)%3B%7Dreturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20and%20unbinds%20the%20nodes%20previously%20contained%20in%20the%20provided%0A%20%20%20%20%20%20%20*%20DocumentFragment%20returned%20from%20%60_stampTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!StampedTemplate%7D%20dom%20DocumentFragment%20previously%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60_stampTemplate%60%20associated%20with%20the%20nodes%20to%20be%20removed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeBoundDom'%2Cvalue%3Afunction%20_removeBoundDom(dom)%7B%2F%2F%20Unlink%20template%20info%0Avar%20templateInfo%3Ddom.templateInfo%3Bif(templateInfo.previousTemplateInfo)%7BtemplateInfo.previousTemplateInfo.nextTemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7Dif(templateInfo.nextTemplateInfo)%7BtemplateInfo.nextTemplateInfo.previousTemplateInfo%3DtemplateInfo.previousTemplateInfo%3B%7Dif(this.__templateInfoLast%3D%3DtemplateInfo)%7Bthis.__templateInfoLast%3DtemplateInfo.previousTemplateInfo%3B%7DtemplateInfo.previousTemplateInfo%3DtemplateInfo.nextTemplateInfo%3Dnull%3B%2F%2F%20Remove%20stamped%20nodes%0Avar%20nodes%3DtemplateInfo.childNodes%3Bfor(var%20i%3D0%3Bi%3Cnodes.length%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3Bnode.parentNode.removeChild(node)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20%60TextNode%60's'%20%60textContent%60.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'PROPERTY_EFFECT_TYPES'%2Cget%3Afunction%20get()%7Breturn%20TYPES%3B%7D%7D%5D%2C%5B%7Bkey%3A'addPropertyEffect'%2Cvalue%3Afunction%20addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis.prototype._addPropertyEffect(property%2Ctype%2Ceffect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20single-property%20observer%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createPropertyObserver'%2Cvalue%3Afunction%20createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bthis.prototype._createPropertyObserver(property%2Cmethod%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20multi-property%20%22method%20observer%22%20based%20on%20the%20provided%0A%20%20%20%20%20%20%20*%20expression%2C%20which%20should%20be%20a%20string%20in%20the%20form%20of%20a%20normal%20JavaScript%0A%20%20%20%20%20%20%20*%20function%20signature%3A%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60.%20%20Each%20argument%0A%20%20%20%20%20%20%20*%20should%20correspond%20to%20a%20property%20or%20path%20in%20the%20context%20of%20this%0A%20%20%20%20%20%20%20*%20prototype%20(or%20instance)%2C%20or%20may%20be%20a%20literal%20string%20or%20number.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createMethodObserver'%2Cvalue%3Afunction%20createMethodObserver(expression%2CdynamicFn)%7Bthis.prototype._createMethodObserver(expression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20dispatch%20%60%3Cproperty%3E-changed%60%0A%20%20%20%20%20%20%20*%20events%20to%20notify%20of%20changes%20to%20the%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createNotifyingProperty'%2Cvalue%3Afunction%20createNotifyingProperty(property)%7Bthis.prototype._createNotifyingProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20read-only%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20To%20set%20the%20property%2C%20use%20the%20protected%20%60_setProperty%60%20API.%0A%20%20%20%20%20%20%20*%20To%20create%20a%20custom%20protected%20setter%20(e.g.%20%60_setMyProp()%60%20for%0A%20%20%20%20%20%20%20*%20property%20%60myProp%60)%2C%20pass%20%60true%60%20for%20%60protectedSetter%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20the%20property%20will%20have%20other%20property%20effects%2C%20this%20method%0A%20%20%20%20%20%20%20*%20should%20be%20called%20first%2C%20before%20adding%20other%20effects.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReadOnlyProperty'%2Cvalue%3Afunction%20createReadOnlyProperty(property%2CprotectedSetter)%7Bthis.prototype._createReadOnlyProperty(property%2CprotectedSetter)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20reflect%20the%20property%20value%0A%20%20%20%20%20%20%20*%20to%20a%20(dash-cased)%20attribute%20of%20the%20same%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReflectedProperty'%2Cvalue%3Afunction%20createReflectedProperty(property)%7Bthis.prototype._createReflectedProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20computed%20property%20whose%20value%20is%20set%20to%20the%20result%20of%20the%0A%20%20%20%20%20%20%20*%20method%20described%20by%20the%20given%20%60expression%60%20each%20time%20one%20or%20more%0A%20%20%20%20%20%20%20*%20arguments%20to%20the%20method%20changes.%20%20The%20expression%20should%20be%20a%20string%0A%20%20%20%20%20%20%20*%20in%20the%20form%20of%20a%20normal%20JavaScript%20function%20signature%3A%0A%20%20%20%20%20%20%20*%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20%20%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createComputedProperty'%2Cvalue%3Afunction%20createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bthis.prototype._createComputedProperty(property%2Cexpression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20the%20provided%20template%20to%20ensure%20binding%20effects%20are%20created%0A%20%20%20%20%20%20%20*%20for%20them%2C%20and%20then%20ensures%20property%20accessors%20are%20created%20for%20any%0A%20%20%20%20%20%20%20*%20dependent%20properties%20in%20the%20template.%20%20Binding%20effects%20for%20bound%0A%20%20%20%20%20%20%20*%20templates%20are%20stored%20in%20a%20linked%20list%20on%20the%20instance%20so%20that%0A%20%20%20%20%20%20%20*%20templates%20can%20be%20efficiently%20stamped%20and%20unstamped.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'bindTemplate'%2Cvalue%3Afunction%20bindTemplate(template)%7Breturn%20this.prototype._bindTemplate(template)%3B%7D%7D%2C%7Bkey%3A'_addTemplatePropertyEffect'%2Cvalue%3Afunction%20_addTemplatePropertyEffect(templateInfo%2Cprop%2Ceffect)%7Bvar%20hostProps%3DtemplateInfo.hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3BhostProps%5Bprop%5D%3Dtrue%3Bvar%20effects%3DtemplateInfo.propertyEffects%3DtemplateInfo.propertyEffects%7C%7C%7B%7D%3Bvar%20propEffects%3Deffects%5Bprop%5D%3Deffects%5Bprop%5D%7C%7C%5B%5D%3BpropEffects.push(effect)%3B%7D%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNode'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%20parts%3Dthis._parseBindings(node.textContent%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Initialize%20the%20textContent%20with%20any%20literal%20parts%0A%2F%2F%20NOTE%3A%20default%20to%20a%20space%20here%20so%20the%20textNode%20remains%3B%20some%20browsers%0A%2F%2F%20(IE)%20omit%20an%20empty%20textNode%20following%20cloneNode%2FimportNode.%0Anode.textContent%3DliteralFromParts(parts)%7C%7C'%20'%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'text'%2C'textContent'%2Cparts)%3Bnoted%3Dtrue%3B%7D%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20attributes.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7Bvar%20parts%3Dthis._parseBindings(value%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Attribute%20or%20property%0Avar%20origName%3Dname%3Bvar%20kind%3D'property'%3B%2F%2F%20The%20only%20way%20we%20see%20a%20capital%20letter%20here%20is%20if%20the%20attr%20has%0A%2F%2F%20a%20capital%20letter%20in%20it%20per%20spec.%20In%20this%20case%2C%20to%20make%20sure%0A%2F%2F%20this%20binding%20works%2C%20we%20go%20ahead%20and%20make%20the%20binding%20to%20the%20attribute.%0Aif(capitalAttributeRegex.test(name))%7Bkind%3D'attribute'%3B%7Delse%20if(name%5Bname.length-1%5D%3D%3D'%24')%7Bname%3Dname.slice(0%2C-1)%3Bkind%3D'attribute'%3B%7D%2F%2F%20Initialize%20attribute%20bindings%20with%20any%20literal%20parts%0Avar%20literal%3DliteralFromParts(parts)%3Bif(literal%26%26kind%3D%3D'attribute')%7B%2F%2F%20Ensure%20a%20ShadyCSS%20template%20scoped%20style%20is%20not%20removed%0A%2F%2F%20when%20a%20class%24%20binding's%20initial%20literal%20value%20is%20set.%0Aif(name%3D%3D'class'%26%26node.hasAttribute('class'))%7Bliteral%2B%3D'%20'%2Bnode.getAttribute(name)%3B%7Dnode.setAttribute(name%2Cliteral)%3B%7D%2F%2F%20Clear%20attribute%20before%20removing%2C%20since%20IE%20won't%20allow%20removing%0A%2F%2F%20%60value%60%20attribute%20if%20it%20previously%20had%20a%20value%20(can't%0A%2F%2F%20unconditionally%20set%20''%20before%20removing%20since%20attributes%20with%20%60%24%60%0A%2F%2F%20can't%20be%20set%20using%20setAttribute)%0Aif(node.localName%3D%3D%3D'input'%26%26origName%3D%3D%3D'value')%7Bnode.setAttribute(origName%2C'')%3B%7D%2F%2F%20Remove%20annotation%0Anode.removeAttribute(origName)%3B%2F%2F%20Case%20hackery%3A%20attributes%20are%20lower-case%2C%20but%20bind%20targets%0A%2F%2F%20(properties)%20are%20case%20sensitive.%20Gambit%20is%20to%20map%20dash-case%20to%0A%2F%2F%20camel-case%3A%20%60foo-bar%60%20becomes%20%60fooBar%60.%0A%2F%2F%20Attribute%20bindings%20are%20excepted.%0Aif(kind%3D%3D%3D'property')%7Bname%3DPolymer.CaseMap.dashToCamelCase(name)%3B%7DaddBinding(this%2CtemplateInfo%2CnodeInfo%2Ckind%2Cname%2Cparts%2Cliteral)%3Breturn%20true%3B%7Delse%7Breturn%20_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNodeAttribute'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20binding%20the%20properties%20that%20a%20nested%20template%20depends%20on%20to%20the%20template%0A%20%20%20%20%20%20%20*%20as%20%60_host_%3Cproperty%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNestedTemplate'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3B%2F%2F%20Merge%20host%20props%20into%20outer%20template%20and%20add%20bindings%0Avar%20hostProps%3DnodeInfo.templateInfo.hostProps%3Bvar%20mode%3D'%7B'%3Bfor(var%20source%20in%20hostProps)%7Bvar%20parts%3D%5B%7Bmode%3Amode%2Csource%3Asource%2Cdependencies%3A%5Bsource%5D%7D%5D%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'property'%2C'_host_'%2Bsource%2Cparts)%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20parse%20text%20in%20a%20template%20(either%20attribute%20values%20or%0A%20%20%20%20%20%20%20*%20textContent)%20into%20binding%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Any%20overrides%20of%20this%20method%20should%20return%20an%20array%20of%20binding%20part%0A%20%20%20%20%20%20%20*%20metadata%20%20representing%20one%20or%20more%20bindings%20found%20in%20the%20provided%20text%0A%20%20%20%20%20%20%20*%20and%20any%20%22literal%22%20text%20in%20between.%20%20Any%20non-literal%20parts%20will%20be%20passed%0A%20%20%20%20%20%20%20*%20to%20%60_evaluateBinding%60%20when%20any%20dependencies%20change.%20%20The%20only%20required%0A%20%20%20%20%20%20%20*%20fields%20of%20each%20%22part%22%20in%20the%20returned%20array%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60dependencies%60%20-%20Array%20containing%20trigger%20metadata%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20that%20should%20trigger%20the%20binding%20to%20update%0A%20%20%20%20%20%20%20*%20-%20%60literal%60%20-%20String%20containing%20text%20if%20the%20part%20represents%20a%20literal%3B%0A%20%20%20%20%20%20%20*%20%20%20in%20this%20case%20no%20%60dependencies%60%20are%20needed%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Additional%20metadata%20for%20use%20by%20%60_evaluateBinding%60%20may%20be%20provided%20in%0A%20%20%20%20%20%20%20*%20each%20part%20object%20as%20needed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20handles%20the%20following%20types%20of%20bindings%0A%20%20%20%20%20%20%20*%20(one%20or%20more%20may%20be%20intermixed%20with%20literal%20strings)%3A%0A%20%20%20%20%20%20%20*%20-%20Property%20binding%3A%20%60%5B%5Bprop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Path%20binding%3A%20%60%5B%5Bobject.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Negated%20property%20or%20path%20bindings%3A%20%60%5B%5B!prop%5D%5D%60%20or%20%60%5B%5B!object.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Two-way%20property%20or%20path%20bindings%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%7B%7Bprop%7D%7D%60%2C%20%60%7B%7Bobject.prop%7D%7D%60%2C%20%60%7B%7B!prop%7D%7D%60%20or%20%60%7B%7B!object.prop%7D%7D%60%0A%20%20%20%20%20%20%20*%20-%20Inline%20computed%20method%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%5B%5Bcompute(a%2C%20'literal'%2C%20b)%5D%5D%60%2C%20%60%5B%5B!compute(a%2C%20'literal'%2C%20b)%5D%5D%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20uses%20a%20regular%20expression%20for%20best%0A%20%20%20%20%20%20%20*%20performance.%20However%2C%20the%20regular%20expression%20uses%20a%20white-list%20of%0A%20%20%20%20%20%20%20*%20allowed%20characters%20in%20a%20data-binding%2C%20which%20causes%20problems%20for%0A%20%20%20%20%20%20%20*%20data-bindings%20that%20do%20use%20characters%20not%20in%20this%20white-list.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Instead%20of%20updating%20the%20white-list%20with%20all%20allowed%20characters%2C%0A%20%20%20%20%20%20%20*%20there%20is%20a%20StrictBindingParser%20(see%20lib%2Fmixins%2Fstrict-binding-parser)%0A%20%20%20%20%20%20%20*%20that%20uses%20a%20state%20machine%20instead.%20This%20state%20machine%20is%20able%20to%20handle%0A%20%20%20%20%20%20%20*%20all%20characters.%20However%2C%20it%20is%20slightly%20less%20performant%2C%20therefore%20we%0A%20%20%20%20%20%20%20*%20extracted%20it%20into%20a%20separate%20optional%20mixin.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20Text%20to%20parse%20from%20attribute%20or%20textContent%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Current%20template%20metadata%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C!BindingPart%3E%7D%20Array%20of%20binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseBindings'%2Cvalue%3Afunction%20_parseBindings(text%2CtemplateInfo)%7Bvar%20parts%3D%5B%5D%3Bvar%20lastIndex%3D0%3Bvar%20m%3Dvoid%200%3B%2F%2F%20Example%3A%20%22literal1%7B%7Bprop%7D%7Dliteral2%5B%5B!compute(foo%2Cbar)%5D%5Dfinal%22%0A%2F%2F%20Regex%20matches%3A%0A%2F%2F%20%20%20%20%20%20%20%20Iteration%201%3A%20%20Iteration%202%3A%0A%2F%2F%20m%5B1%5D%3A%20'%7B%7B'%20%20%20%20%20%20%20%20%20%20'%5B%5B'%0A%2F%2F%20m%5B2%5D%3A%20''%20%20%20%20%20%20%20%20%20%20%20%20'!'%0A%2F%2F%20m%5B3%5D%3A%20'prop'%20%20%20%20%20%20%20%20'compute(foo%2Cbar)'%0Awhile((m%3DbindingRegex.exec(text))!%3D%3Dnull)%7B%2F%2F%20Add%20literal%20part%0Aif(m.index%3ElastIndex)%7Bparts.push(%7Bliteral%3Atext.slice(lastIndex%2Cm.index)%7D)%3B%7D%2F%2F%20Add%20binding%20part%0Avar%20mode%3Dm%5B1%5D%5B0%5D%3Bvar%20negate%3DBoolean(m%5B2%5D)%3Bvar%20source%3Dm%5B3%5D.trim()%3Bvar%20customEvent%3Dfalse%2CnotifyEvent%3D''%2Ccolon%3D-1%3Bif(mode%3D%3D'%7B'%26%26(colon%3Dsource.indexOf('%3A%3A'))%3E0)%7BnotifyEvent%3Dsource.substring(colon%2B2)%3Bsource%3Dsource.substring(0%2Ccolon)%3BcustomEvent%3Dtrue%3B%7Dvar%20signature%3DparseMethod(source)%3Bvar%20dependencies%3D%5B%5D%3Bif(signature)%7B%2F%2F%20Inline%20computed%20function%0Avar%20args%3Dsignature.args%2CmethodName%3Dsignature.methodName%3Bfor(var%20i%3D0%3Bi%3Cargs.length%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bif(!arg.literal)%7Bdependencies.push(arg)%3B%7D%7Dvar%20dynamicFns%3DtemplateInfo.dynamicFns%3Bif(dynamicFns%26%26dynamicFns%5BmethodName%5D%7C%7Csignature.static)%7Bdependencies.push(methodName)%3Bsignature.dynamicFn%3Dtrue%3B%7D%7Delse%7B%2F%2F%20Property%20or%20path%0Adependencies.push(source)%3B%7Dparts.push(%7Bsource%3Asource%2Cmode%3Amode%2Cnegate%3Anegate%2CcustomEvent%3AcustomEvent%2Csignature%3Asignature%2Cdependencies%3Adependencies%2Cevent%3AnotifyEvent%7D)%3BlastIndex%3DbindingRegex.lastIndex%3B%7D%2F%2F%20Add%20a%20final%20literal%20part%0Aif(lastIndex%26%26lastIndex%3Ctext.length)%7Bvar%20literal%3Dtext.substring(lastIndex)%3Bif(literal)%7Bparts.push(%7Bliteral%3Aliteral%7D)%3B%7D%7Dif(parts.length)%7Breturn%20parts%3B%7Delse%7Breturn%20null%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20evaluate%20a%20previously%20parsed%20binding%20part%20based%20on%20a%20set%20of%0A%20%20%20%20%20%20%20*%20one%20or%20more%20changed%20dependencies.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bthis%7D%20inst%20Element%20that%20should%20be%20used%20as%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20binding%20dependencies%0A%20%20%20%20%20%20%20*%20%40param%20%7BBindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20that%20triggered%20this%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20the%20binding%20part%20evaluated%20to%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_evaluateBinding'%2Cvalue%3Afunction%20_evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%7Bvar%20value%3Dvoid%200%3Bif(part.signature)%7Bvalue%3DrunMethodEffect(inst%2Cpath%2Cprops%2ColdProps%2Cpart.signature)%3B%7Delse%20if(path!%3Dpart.source)%7Bvalue%3DPolymer.Path.get(inst%2Cpart.source)%3B%7Delse%7Bif(hasPaths%26%26Polymer.Path.isPath(path))%7Bvalue%3DPolymer.Path.get(inst%2Cpath)%3B%7Delse%7Bvalue%3Dinst.__data%5Bpath%5D%3B%7D%7Dif(part.negate)%7Bvalue%3D!value%3B%7Dreturn%20value%3B%7D%7D%5D)%3Breturn%20PropertyEffects%3B%7D(propertyEffectsBase)%3B%2F%2F%20make%20a%20typing%20for%20closure%20%3AP%0APropertyEffectsType%3DPropertyEffects%3Breturn%20PropertyEffects%3B%7D)%3B%2F**%0A%20%20%20*%20Helper%20api%20for%20enqueuing%20client%20dom%20created%20by%20a%20host%20element.%0A%20%20%20*%0A%20%20%20*%20By%20default%20elements%20are%20flushed%20via%20%60_flushProperties%60%20when%0A%20%20%20*%20%60connectedCallback%60%20is%20called.%20Elements%20attach%20their%20client%20dom%20to%0A%20%20%20*%20themselves%20at%20%60ready%60%20time%20which%20results%20from%20this%20first%20flush.%0A%20%20%20*%20This%20provides%20an%20ordering%20guarantee%20that%20the%20client%20dom%20an%20element%0A%20%20%20*%20creates%20is%20flushed%20before%20the%20element%20itself%20(i.e.%20client%20%60ready%60%0A%20%20%20*%20fires%20before%20host%20%60ready%60).%0A%20%20%20*%0A%20%20%20*%20However%2C%20if%20%60_flushProperties%60%20is%20called%20*before*%20an%20element%20is%20connected%2C%0A%20%20%20*%20as%20for%20example%20%60Templatize%60%20does%2C%20this%20ordering%20guarantee%20cannot%20be%0A%20%20%20*%20satisfied%20because%20no%20elements%20are%20connected.%20(Note%3A%20Bound%20elements%20that%0A%20%20%20*%20receive%20data%20do%20become%20enqueued%20clients%20and%20are%20properly%20ordered%20but%0A%20%20%20*%20unbound%20elements%20are%20not.)%0A%20%20%20*%0A%20%20%20*%20To%20maintain%20the%20desired%20%22client%20before%20host%22%20ordering%20guarantee%20for%20this%0A%20%20%20*%20case%20we%20rely%20on%20the%20%22host%20stack.%20Client%20nodes%20registers%20themselves%20with%0A%20%20%20*%20the%20creating%20host%20element%20when%20created.%20This%20ensures%20that%20all%20client%20dom%0A%20%20%20*%20is%20readied%20in%20the%20proper%20order%2C%20maintaining%20the%20desired%20guarantee.%0A%20%20%20*%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20hostStack%3D%7Bstack%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20add%20to%20hostStack%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FregisterHost%3Afunction%20registerHost(inst)%7Bif(this.stack.length)%7Bvar%20host%3Dthis.stack%5Bthis.stack.length-1%5D%3Bhost._enqueueClient(inst)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20begin%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FbeginHosting%3Afunction%20beginHosting(inst)%7Bthis.stack.push(inst)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20end%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FendHosting%3Afunction%20endHosting(inst)%7Bvar%20stackLen%3Dthis.stack.length%3Bif(stackLen%26%26this.stack%5BstackLen-1%5D%3D%3Dinst)%7Bthis.stack.pop()%3B%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-effects.html.js%0A",
            "totalBytes": 100964,
            "wastedBytes": 66630,
            "wastedPercent": 65.99381957925597
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfor(var%20i%3D0%2Carr2%3DArray(arr.length)%3Bi%3Carr.length%3Bi%2B%2B)%7Barr2%5Bi%5D%3Darr%5Bi%5D%3B%7Dreturn%20arr2%3B%7Delse%7Breturn%20Array.from(arr)%3B%7D%7Dfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20styleInterface%3Dwindow.ShadyCSS%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20Polymer's%20%22legacy%22%20API%20intended%20to%20be%0A%20%20%20*%20backward-compatible%20to%20the%20greatest%20extent%20possible%20with%20the%20API%0A%20%20%20*%20found%20on%20the%20Polymer%201.x%20%60Polymer.Base%60%20prototype%20applied%20to%20all%20elements%0A%20%20%20*%20defined%20using%20the%20%60Polymer(%7B...%7D)%60%20function.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40appliesMixin%20Polymer.GestureEventListeners%0A%20%20%20*%20%40property%20isAttached%20%7Bboolean%7D%20Set%20to%20%60true%60%20in%20this%20element's%0A%20%20%20*%20%20%20%60connectedCallback%60%20and%20%60false%60%20in%20%60disconnectedCallback%60%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20Polymer's%20%22legacy%22%20API%0A%20%20%20*%2FPolymer.LegacyElementMixin%3DPolymer.dedupingMixin(function(base)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_GestureEventListeners%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_DirMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20legacyElementBase%3DPolymer.DirMixin(Polymer.GestureEventListeners(Polymer.ElementMixin(base)))%3B%2F**%0A%20%20%20%20%20*%20Map%20of%20simple%20names%20to%20touch%20action%20names%0A%20%20%20%20%20*%20%40dict%0A%20%20%20%20%20*%2Fvar%20DIRECTION_MAP%3D%7B'x'%3A'pan-x'%2C'y'%3A'pan-y'%2C'none'%3A'none'%2C'all'%3A'auto'%7D%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40extends%20%7BlegacyElementBase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_LegacyElementMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20LegacyElement%3Dfunction(_legacyElementBase)%7B_inherits(LegacyElement%2C_legacyElementBase)%3Bfunction%20LegacyElement()%7B_classCallCheck(this%2CLegacyElement)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(LegacyElement.__proto__%7C%7CObject.getPrototypeOf(LegacyElement)).call(this))%3B_this.isAttached%3B%2F**%20%40type%20%7BWeakMap%3C!Element%2C%20!Object%3Cstring%2C%20!Function%3E%3E%7D%20*%2F_this.__boundListeners%3B%2F**%20%40type%20%7BObject%3Cstring%2C%20Function%3E%7D%20*%2F_this._debouncers%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Forwards%20%60importMeta%60%20from%20the%20prototype%20(i.e.%20from%20the%20info%20object%0A%20%20%20%20%20%20%20*%20passed%20to%20%60Polymer(%7B...%7D)%60)%20to%20the%20static%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20The%20%60import.meta%60%20object%20set%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20%60this%60%20is%20always%20in%20the%20instance%20in%0A%20%20%20%20%20%20%20*%20%20closure%20for%20some%20reason%20even%20in%20a%20static%20method%2C%20rather%20than%20the%20class%0A%20%20%20%20%20%20%20*%2F_createClass(LegacyElement%2C%5B%7Bkey%3A'created'%2C%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20the%20%60constructor%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20created()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20implementation%20of%20%60connectedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20Polymer%20legacy%20API's%20%60attached%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.isAttached%3Dtrue%3Bthis.attached()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60connectedCallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attached'%2Cvalue%3Afunction%20attached()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20implementation%20of%20%60disconnectedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20Polymer%20legacy%20API's%20%60detached%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bthis.isAttached%3Dfalse%3Bthis.detached()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60disconnectedCallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'detached'%2Cvalue%3Afunction%20detached()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Provides%20an%20override%20implementation%20of%20%60attributeChangedCallback%60%0A%20%20%20%20%20%20%20*%20which%20adds%20the%20Polymer%20legacy%20API's%20%60attributeChanged%60%20method.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'attributeChangedCallback'%2Cthis).call(this%2Cname%2Cold%2Cvalue%2Cnamespace)%3Bthis.attributeChanged(name%2Cold%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Legacy%20callback%20called%20during%20%60attributeChangedChallback%60%2C%20for%20overriding%0A%20%20%20%20%20%20%20*%20by%20the%20user.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChanged'%2Cvalue%3Afunction%20attributeChanged(name%2Cold%2Cvalue)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyEffects%60%20implementation%20to%0A%20%20%20%20%20%20%20*%20add%20support%20for%20class%20initialization%20via%20the%20%60_registered%60%20callback.%0A%20%20%20%20%20%20%20*%20This%20is%20called%20only%20when%20the%20first%20instance%20of%20the%20element%20is%20created.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7Bvar%20proto%3DObject.getPrototypeOf(this)%3Bif(!proto.hasOwnProperty('__hasRegisterFinished'))%7Bthis._registered()%3B%2F%2F%20backstop%20in%20case%20the%20%60_registered%60%20implementation%20does%20not%20set%20this%0Aproto.__hasRegisterFinished%3Dtrue%3B%7D_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3Bthis.root%3D%2F**%20%40type%20%7BHTMLElement%7D%20*%2Fthis%3Bthis.created()%3B%2F%2F%20Ensure%20listeners%20are%20applied%20immediately%20so%20that%20they%20are%0A%2F%2F%20added%20before%20declarative%20event%20listeners.%20This%20allows%20an%20element%20to%0A%2F%2F%20decorate%20itself%20via%20an%20event%20prior%20to%20any%20declarative%20listeners%0A%2F%2F%20seeing%20the%20event.%20Note%2C%20this%20ensures%20compatibility%20with%201.x%20ordering.%0Athis._applyListeners()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20automatically%20when%20an%20element%20is%20initializing.%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20perform%20class%20registration%20time%0A%20%20%20%20%20%20%20*%20work.%20The%20implementation%20should%20ensure%20the%20work%20is%20performed%0A%20%20%20%20%20%20%20*%20only%20once%20for%20the%20class.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_registered'%2Cvalue%3Afunction%20_registered()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyEffects%60%20implementation%20to%0A%20%20%20%20%20%20%20*%20add%20support%20for%20installing%20%60hostAttributes%60%20and%20%60listeners%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bthis._ensureAttributes()%3B_get(LegacyElement.prototype.__proto__%7C%7CObject.getPrototypeOf(LegacyElement.prototype)%2C'ready'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20element%20has%20required%20attributes.%20Called%20when%20the%20element%0A%20%20%20%20%20%20%20*%20is%20being%20readied%20via%20%60ready%60.%20Users%20should%20override%20to%20set%20the%0A%20%20%20%20%20%20%20*%20element's%20required%20attributes.%20The%20implementation%20should%20be%20sure%0A%20%20%20%20%20%20%20*%20to%20check%20and%20not%20override%20existing%20attributes%20added%20by%0A%20%20%20%20%20%20%20*%20the%20user%20of%20the%20element.%20Typically%2C%20setting%20attributes%20should%20be%20left%0A%20%20%20%20%20%20%20*%20to%20the%20element%20user%20and%20not%20done%20here%3B%20reasonable%20exceptions%20include%0A%20%20%20%20%20%20%20*%20setting%20aria%20roles%20and%20focusability.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttributes'%2Cvalue%3Afunction%20_ensureAttributes()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20element%20event%20listeners.%20Called%20when%20the%20element%0A%20%20%20%20%20%20%20*%20is%20being%20readied%20via%20%60ready%60.%20Users%20should%20override%20to%0A%20%20%20%20%20%20%20*%20add%20any%20required%20element%20event%20listeners.%0A%20%20%20%20%20%20%20*%20In%20performance%20critical%20elements%2C%20the%20work%20done%20here%20should%20be%20kept%0A%20%20%20%20%20%20%20*%20to%20a%20minimum%20since%20it%20is%20done%20before%20the%20element%20is%20rendered.%20In%0A%20%20%20%20%20%20%20*%20these%20elements%2C%20consider%20adding%20listeners%20asynchronously%20so%20as%20not%20to%0A%20%20%20%20%20%20%20*%20block%20render.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_applyListeners'%2Cvalue%3Afunction%20_applyListeners()%7B%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20typed%20JavaScript%20value%20to%20a%20string.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%20To%20customize%0A%20%20%20%20%20%20%20*%20how%20properties%20are%20serialized%20to%20attributes%20for%20attribute%20bindings%20and%0A%20%20%20%20%20%20%20*%20%60reflectToAttribute%3A%20true%60%20properties%20as%20well%20as%20this%20method%2C%20override%0A%20%20%20%20%20%20%20*%20the%20%60_serializeValue%60%20method%20provided%20by%20%60Polymer.PropertyAccessors%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20deserialize%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20Serialized%20value%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'serialize'%2Cvalue%3Afunction%20serialize(value)%7Breturn%20this._serializeValue(value)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%20%20To%20customize%0A%20%20%20%20%20%20%20*%20how%20attributes%20are%20deserialized%20to%20properties%20for%20in%0A%20%20%20%20%20%20%20*%20%60attributeChangedCallback%60%2C%20override%20%60_deserializeValue%60%20method%0A%20%20%20%20%20%20%20*%20provided%20by%20%60Polymer.PropertyAccessors%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20String%20to%20deserialize%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20type%20Type%20to%20deserialize%20the%20string%20to%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20deserialized%20value%20in%20the%20%60type%60%20given.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deserialize'%2Cvalue%3Afunction%20deserialize(value%2Ctype)%7Breturn%20this._deserializeValue(value%2Ctype)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Serializes%20a%20property%20to%20its%20associated%20attribute.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20attribute%20Attribute%20name%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Property%20value%20to%20reflect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'reflectPropertyToAttribute'%2Cvalue%3Afunction%20reflectPropertyToAttribute(property%2Cattribute%2Cvalue)%7Bthis._propertyToAttribute(property%2Cattribute%2Cvalue)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20typed%20value%20to%20an%20HTML%20attribute%20on%20a%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20serialize.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Attribute%20name%20to%20serialize%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20set%20attribute%20to.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'serializeValueToAttribute'%2Cvalue%3Afunction%20serializeValueToAttribute(value%2Cattribute%2Cnode)%7Bthis._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%2Cvalue%2Cattribute)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Copies%20own%20properties%20(including%20accessor%20descriptors)%20from%20a%20source%0A%20%20%20%20%20%20%20*%20object%20to%20a%20target%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20prototype%20Target%20object%20to%20copy%20properties%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20api%20Source%20object%20to%20copy%20properties%20from.%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20prototype%20object%20that%20was%20passed%20as%20first%20argument.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'extend'%2Cvalue%3Afunction%20extend(prototype%2Capi)%7Bif(!(prototype%26%26api))%7Breturn%20prototype%7C%7Capi%3B%7Dvar%20n%24%3DObject.getOwnPropertyNames(api)%3Bfor(var%20i%3D0%2Cn%3Bi%3Cn%24.length%26%26(n%3Dn%24%5Bi%5D)%3Bi%2B%2B)%7Bvar%20pd%3DObject.getOwnPropertyDescriptor(api%2Cn)%3Bif(pd)%7BObject.defineProperty(prototype%2Cn%2Cpd)%3B%7D%7Dreturn%20prototype%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Copies%20props%20from%20a%20source%20object%20to%20a%20target%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20this%20method%20uses%20a%20simple%20%60for...in%60%20strategy%20for%20enumerating%0A%20%20%20%20%20%20%20*%20properties.%20%20To%20ensure%20only%20%60ownProperties%60%20are%20copied%20from%20source%0A%20%20%20%20%20%20%20*%20to%20target%20and%20that%20accessor%20implementations%20are%20copied%2C%20use%20%60extend%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20target%20Target%20object%20to%20copy%20properties%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20source%20Source%20object%20to%20copy%20properties%20from.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20Target%20object%20that%20was%20passed%20as%20first%20argument.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'mixin'%2Cvalue%3Afunction%20mixin(target%2Csource)%7Bfor(var%20i%20in%20source)%7Btarget%5Bi%5D%3Dsource%5Bi%5D%3B%7Dreturn%20target%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20the%20prototype%20of%20an%20object.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20is%20provided%20as%20backward-compatible%20legacy%20API%0A%20%20%20%20%20%20%20*%20only.%20%20It%20is%20not%20directly%20called%20by%20any%20Polymer%20features.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20object%20The%20object%20on%20which%20to%20set%20the%20prototype.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20prototype%20The%20prototype%20that%20will%20be%20set%20on%20the%20given%0A%20%20%20%20%20%20%20*%20%60object%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20Returns%20the%20given%20%60object%60%20with%20its%20prototype%20set%0A%20%20%20%20%20%20%20*%20to%20the%20given%20%60prototype%60%20object.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'chainObject'%2Cvalue%3Afunction%20chainObject(object%2Cprototype)%7Bif(object%26%26prototype%26%26object!%3D%3Dprototype)%7Bobject.__proto__%3Dprototype%3B%7Dreturn%20object%3B%7D%2F*%20****%20Begin%20Template%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Calls%20%60importNode%60%20on%20the%20%60content%60%20of%20the%20%60template%60%20specified%20and%0A%20%20%20%20%20%20%20*%20returns%20a%20document%20fragment%20containing%20the%20imported%20content.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20HTML%20template%20element%20to%20instance.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!DocumentFragment%7D%20Document%20fragment%20containing%20the%20imported%0A%20%20%20%20%20%20%20*%20%20%20template%20content.%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'instanceTemplate'%2Cvalue%3Afunction%20instanceTemplate(template)%7Bvar%20content%3Dthis.constructor._contentForTemplate(template)%3Bvar%20dom%3D%2F**%20%40type%20%7B!DocumentFragment%7D%20*%2Fdocument.importNode(content%2Ctrue)%3Breturn%20dom%3B%7D%2F*%20****%20Begin%20Events%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Dispatches%20a%20custom%20event%20with%20an%20optional%20detail%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Name%20of%20event%20type.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20detail%20Detail%20value%20containing%20event-specific%0A%20%20%20%20%20%20%20*%20%20%20payload.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%7B%20bubbles%3A%20(boolean%7Cundefined)%2C%20cancelable%3A%20(boolean%7Cundefined)%2C%20composed%3A%20(boolean%7Cundefined)%20%7D%3D%7D%0A%20%20%20%20%20%20%20*%20%20options%20Object%20specifying%20options.%20%20These%20may%20include%3A%0A%20%20%20%20%20%20%20*%20%20%60bubbles%60%20(boolean%2C%20defaults%20to%20%60true%60)%2C%0A%20%20%20%20%20%20%20*%20%20%60cancelable%60%20(boolean%2C%20defaults%20to%20false)%2C%20and%0A%20%20%20%20%20%20%20*%20%20%60node%60%20on%20which%20to%20fire%20the%20event%20(HTMLElement%2C%20defaults%20to%20%60this%60).%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Event%7D%20The%20new%20event%20that%20was%20fired.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'fire'%2Cvalue%3Afunction%20fire(type%2Cdetail%2Coptions)%7Boptions%3Doptions%7C%7C%7B%7D%3Bdetail%3Ddetail%3D%3D%3Dnull%7C%7Cdetail%3D%3D%3Dundefined%3F%7B%7D%3Adetail%3Bvar%20event%3Dnew%20Event(type%2C%7Bbubbles%3Aoptions.bubbles%3D%3D%3Dundefined%3Ftrue%3Aoptions.bubbles%2Ccancelable%3ABoolean(options.cancelable)%2Ccomposed%3Aoptions.composed%3D%3D%3Dundefined%3Ftrue%3Aoptions.composed%7D)%3Bevent.detail%3Ddetail%3Bvar%20node%3Doptions.node%7C%7Cthis%3Bnode.dispatchEvent(event)%3Breturn%20event%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20add%20an%20event%20listener%20on%20a%20given%20element%2C%0A%20%20%20%20%20%20%20*%20late%20bound%20to%20a%20named%20method%20on%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20add%20event%20listener%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%20to%20listen%20for.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20handler%20method%20on%20%60this%60%20to%20call.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'listen'%2Cvalue%3Afunction%20listen(node%2CeventName%2CmethodName)%7Bnode%3D%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%3Bvar%20hbl%3Dthis.__boundListeners%7C%7C(this.__boundListeners%3Dnew%20WeakMap())%3Bvar%20bl%3Dhbl.get(node)%3Bif(!bl)%7Bbl%3D%7B%7D%3Bhbl.set(node%2Cbl)%3B%7Dvar%20key%3DeventName%2BmethodName%3Bif(!bl%5Bkey%5D)%7Bbl%5Bkey%5D%3Dthis._addMethodEventListenerToNode(node%2CeventName%2CmethodName%2Cthis)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20remove%20an%20event%20listener%20from%20a%20given%20element%2C%0A%20%20%20%20%20%20%20*%20late%20bound%20to%20a%20named%20method%20on%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20remove%20event%20listener%20from.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%20to%20stop%20listening%20to.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20handler%20method%20on%20%60this%60%20to%20not%20call%0A%20%20%20%20%20%20%20anymore.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlisten'%2Cvalue%3Afunction%20unlisten(node%2CeventName%2CmethodName)%7Bnode%3D%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%3Bvar%20bl%3Dthis.__boundListeners%26%26this.__boundListeners.get(node)%3Bvar%20key%3DeventName%2BmethodName%3Bvar%20handler%3Dbl%26%26bl%5Bkey%5D%3Bif(handler)%7Bthis._removeEventListenerFromNode(node%2CeventName%2Chandler)%3Bbl%5Bkey%5D%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20scrolling%20behavior%20to%20all%20direction%2C%20one%20direction%2C%20or%20none.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Valid%20scroll%20directions%3A%0A%20%20%20%20%20%20%20*%20%20%20-%20'all'%3A%20scroll%20in%20any%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'x'%3A%20scroll%20only%20in%20the%20'x'%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'y'%3A%20scroll%20only%20in%20the%20'y'%20direction%0A%20%20%20%20%20%20%20*%20%20%20-%20'none'%3A%20disable%20scrolling%20for%20this%20node%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20direction%20Direction%20to%20allow%20scrolling%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60all%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20scroll%20direction%20setting.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setScrollDirection'%2Cvalue%3Afunction%20setScrollDirection(direction%2Cnode)%7BPolymer.Gestures.setTouchAction(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%2CDIRECTION_MAP%5Bdirection%5D%7C%7C'auto')%3B%7D%2F*%20****%20End%20Events%20****%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20to%20run%20%60querySelector%60%20on%20this%20local%20DOM%20scope.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20calls%20%60Polymer.dom(this.root).querySelector(slctr)%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20slctr%20Selector%20to%20run%20on%20this%20local%20DOM%20scope%0A%20%20%20%20%20%20%20*%20%40return%20%7BElement%7D%20Element%20found%20by%20the%20selector%2C%20or%20null%20if%20not%20found.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'%24%24'%2Cvalue%3Afunction%20%24%24(slctr)%7Breturn%20this.root.querySelector(slctr)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Return%20the%20element%20whose%20local%20dom%20within%20which%20this%20element%0A%20%20%20%20%20%20%20*%20is%20contained.%20This%20is%20a%20shorthand%20for%0A%20%20%20%20%20%20%20*%20%60this.getRootNode().host%60.%0A%20%20%20%20%20%20%20*%20%40this%20%7BElement%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'distributeContent'%2C%2F**%0A%20%20%20%20%20%20%20*%20Force%20this%20element%20to%20distribute%20its%20children%20to%20its%20local%20dom.%0A%20%20%20%20%20%20%20*%20This%20should%20not%20be%20necessary%20as%20of%20Polymer%202.0.2%20and%20is%20provided%20only%0A%20%20%20%20%20%20%20*%20for%20backwards%20compatibility.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20distributeContent()%7Bif(window.ShadyDOM%26%26this.shadowRoot)%7BShadyDOM.flush()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20that%20are%20the%20effective%20childNodes.%20The%20effective%0A%20%20%20%20%20%20%20*%20childNodes%20list%20is%20the%20same%20as%20the%20element's%20childNodes%20except%20that%0A%20%20%20%20%20%20%20*%20any%20%60%3Ccontent%3E%60%20elements%20are%20replaced%20with%20the%20list%20of%20nodes%20distributed%0A%20%20%20%20%20%20%20*%20to%20the%20%60%3Ccontent%3E%60%2C%20the%20result%20of%20its%20%60getDistributedNodes%60%20method.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20child%20nodes.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildNodes'%2Cvalue%3Afunction%20getEffectiveChildNodes()%7Bvar%20thisEl%3D%2F**%20%40type%20%7BElement%7D%20*%2Fthis%3Bvar%20domApi%3D%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(thisEl)%3Breturn%20domApi.getEffectiveChildNodes()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20distributed%20within%20this%20element%20that%20match%0A%20%20%20%20%20%20%20*%20%60selector%60.%20These%20can%20be%20dom%20children%20or%20elements%20distributed%20to%0A%20%20%20%20%20%20%20*%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20distributed%20elements%20that%20match%20selector.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryDistributedElements'%2Cvalue%3Afunction%20queryDistributedElements(selector)%7Bvar%20thisEl%3D%2F**%20%40type%20%7BElement%7D%20*%2Fthis%3Bvar%20domApi%3D%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(thisEl)%3Breturn%20domApi.queryDistributedElements(selector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20elements%20that%20are%20the%20effective%20children.%20The%20effective%0A%20%20%20%20%20%20%20*%20children%20list%20is%20the%20same%20as%20the%20element's%20children%20except%20that%0A%20%20%20%20%20%20%20*%20any%20%60%3Ccontent%3E%60%20elements%20are%20replaced%20with%20the%20list%20of%20elements%0A%20%20%20%20%20%20%20*%20distributed%20to%20the%20%60%3Ccontent%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20children.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildren'%2Cvalue%3Afunction%20getEffectiveChildren()%7Bvar%20list%3Dthis.getEffectiveChildNodes()%3Breturn%20list.filter(function(%2F**%20%40type%20%7B!Node%7D%20*%2Fn)%7Breturn%20n.nodeType%3D%3D%3DNode.ELEMENT_NODE%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20string%20of%20text%20content%20that%20is%20the%20concatenation%20of%20the%0A%20%20%20%20%20%20%20*%20text%20content's%20of%20the%20element's%20effective%20childNodes%20(the%20elements%0A%20%20%20%20%20%20%20*%20returned%20by%20%3Ca%20href%3D%22%23getEffectiveChildNodes%3EgetEffectiveChildNodes%3C%2Fa%3E.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20List%20of%20effective%20children.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveTextContent'%2Cvalue%3Afunction%20getEffectiveTextContent()%7Bvar%20cn%3Dthis.getEffectiveChildNodes()%3Bvar%20tc%3D%5B%5D%3Bfor(var%20i%3D0%2Cc%3Bc%3Dcn%5Bi%5D%3Bi%2B%2B)%7Bif(c.nodeType!%3D%3DNode.COMMENT_NODE)%7Btc.push(c.textContent)%3B%7D%7Dreturn%20tc.join('')%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20first%20effective%20childNode%20within%20this%20element%20that%0A%20%20%20%20%20%20%20*%20match%20%60selector%60.%20These%20can%20be%20dom%20child%20nodes%20or%20elements%20distributed%0A%20%20%20%20%20%20%20*%20to%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7BNode%7D%20First%20effective%20child%20node%20that%20matches%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryEffectiveChildren'%2Cvalue%3Afunction%20queryEffectiveChildren(selector)%7Bvar%20e%24%3Dthis.queryDistributedElements(selector)%3Breturn%20e%24%26%26e%24%5B0%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20effective%20childNodes%20within%20this%20element%20that%0A%20%20%20%20%20%20%20*%20match%20%60selector%60.%20These%20can%20be%20dom%20child%20nodes%20or%20elements%20distributed%0A%20%20%20%20%20%20%20*%20to%20children%20that%20are%20insertion%20points.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20run.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20effective%20child%20nodes%20that%20match%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryAllEffectiveChildren'%2Cvalue%3Afunction%20queryAllEffectiveChildren(selector)%7Breturn%20this.queryDistributedElements(selector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20nodes%20distributed%20to%20this%20element's%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20this%20element%20contains%20more%20than%20one%20%60%3Cslot%3E%60%20in%20its%20local%20DOM%2C%0A%20%20%20%20%20%20%20*%20an%20optional%20selector%20may%20be%20passed%20to%20choose%20the%20desired%20content.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20slctr%20CSS%20selector%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20%20%20%60%3Cslot%3E%60.%20%20Defaults%20to%20%60content%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20List%20of%20distributed%20nodes%20for%20the%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getContentChildNodes'%2Cvalue%3Afunction%20getContentChildNodes(slctr)%7Bvar%20content%3Dthis.root.querySelector(slctr%7C%7C'slot')%3Breturn%20content%3F%2F**%20%40type%20%7BPolymer.DomApi%7D%20*%2FPolymer.dom(content).getDistributedNodes()%3A%5B%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20list%20of%20element%20children%20distributed%20to%20this%20element's%0A%20%20%20%20%20%20%20*%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20this%20element%20contains%20more%20than%20one%20%60%3Cslot%3E%60%20in%20its%0A%20%20%20%20%20%20%20*%20local%20DOM%2C%20an%20optional%20selector%20may%20be%20passed%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20content.%20%20This%20method%20differs%20from%20%60getContentChildNodes%60%20in%20that%20only%0A%20%20%20%20%20%20%20*%20elements%20are%20returned.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20slctr%20CSS%20selector%20to%20choose%20the%20desired%0A%20%20%20%20%20%20%20*%20%20%20%60%3Ccontent%3E%60.%20%20Defaults%20to%20%60content%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLElement%3E%7D%20List%20of%20distributed%20nodes%20for%20the%0A%20%20%20%20%20%20%20*%20%20%20%60%3Cslot%3E%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getContentChildren'%2Cvalue%3Afunction%20getContentChildren(slctr)%7Bvar%20children%3D%2F**%20%40type%20%7B!Array%3C!HTMLElement%3E%7D%20*%2Fthis.getContentChildNodes(slctr).filter(function(n)%7Breturn%20n.nodeType%3D%3D%3DNode.ELEMENT_NODE%3B%7D)%3Breturn%20children%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Checks%20whether%20an%20element%20is%20in%20this%20element's%20light%20DOM%20tree.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3FNode%7D%20node%20The%20element%20to%20be%20checked.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20node%20is%20in%20this%20element's%20light%20DOM%20tree.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isLightDescendant'%2Cvalue%3Afunction%20isLightDescendant(node)%7Bvar%20thisNode%3D%2F**%20%40type%20%7BNode%7D%20*%2Fthis%3Breturn%20thisNode!%3D%3Dnode%26%26thisNode.contains(node)%26%26thisNode.getRootNode()%3D%3D%3Dnode.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Checks%20whether%20an%20element%20is%20in%20this%20element's%20local%20DOM%20tree.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Element%7D%20node%20The%20element%20to%20be%20checked.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20node%20is%20in%20this%20element's%20local%20DOM%20tree.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isLocalDescendant'%2Cvalue%3Afunction%20isLocalDescendant(node)%7Breturn%20this.root%3D%3D%3Dnode.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20No-op%20for%20backwards%20compatibility.%20This%20should%20now%20be%20handled%20by%0A%20%20%20%20%20%20%20*%20ShadyCss%20library.%0A%20%20%20%20%20%20%20*%20%40param%20%20%7B*%7D%20container%20Unused%0A%20%20%20%20%20%20%20*%20%40param%20%20%7B*%7D%20shouldObserve%20Unused%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'scopeSubtree'%2Cvalue%3Afunction%20scopeSubtree(container%2CshouldObserve)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20computed%20style%20value%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20The%20css%20property%20name.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Returns%20the%20computed%20css%20property%20value%20for%20the%20given%0A%20%20%20%20%20%20%20*%20%60property%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20LegacyElementMixin%20must%20be%20applied%20to%20an%20HTMLElement%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getComputedStyleValue'%2Cvalue%3Afunction%20getComputedStyleValue(property)%7Breturn%20styleInterface.getComputedStyleValue(%2F**%20%40type%20%7B!Element%7D%20*%2Fthis%2Cproperty)%3B%7D%2F%2F%20debounce%0A%2F**%0A%20%20%20%20%20%20%20*%20Call%20%60debounce%60%20to%20collapse%20multiple%20requests%20for%20a%20named%20task%20into%0A%20%20%20%20%20%20%20*%20one%20invocation%20which%20is%20made%20after%20the%20wait%20time%20has%20elapsed%20with%0A%20%20%20%20%20%20%20*%20no%20new%20request.%20%20If%20no%20wait%20time%20is%20given%2C%20the%20callback%20will%20be%20called%0A%20%20%20%20%20%20%20*%20at%20microtask%20timing%20(guaranteed%20before%20paint).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20debouncedClickAction(e)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%2F%2F%20will%20not%20call%20%60processClick%60%20more%20than%20once%20per%20100ms%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20this.debounce('click'%2C%20function()%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20this.processClick()%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%20100)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20String%20to%20identify%20the%20debounce%20job.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction()%3Avoid%7D%20callback%20Function%20that%20is%20called%20(with%20%60this%60%0A%20%20%20%20%20%20%20*%20%20%20context)%20when%20the%20wait%20time%20elapses.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20wait%20Optional%20wait%20time%20in%20milliseconds%20(ms)%20after%20the%0A%20%20%20%20%20%20%20*%20%20%20last%20signal%20that%20must%20elapse%20before%20invoking%20%60callback%60%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Object%7D%20Returns%20a%20debouncer%20object%20on%20which%20exists%20the%0A%20%20%20%20%20%20%20*%20following%20methods%3A%20%60isActive()%60%20returns%20true%20if%20the%20debouncer%20is%0A%20%20%20%20%20%20%20*%20active%3B%20%60cancel()%60%20cancels%20the%20debouncer%20if%20it%20is%20active%3B%0A%20%20%20%20%20%20%20*%20%60flush()%60%20immediately%20invokes%20the%20debounced%20callback%20if%20the%20debouncer%0A%20%20%20%20%20%20%20*%20is%20active.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'debounce'%2Cvalue%3Afunction%20debounce(jobName%2Ccallback%2Cwait)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Breturn%20this._debouncers%5BjobName%5D%3DPolymer.Debouncer.debounce(this._debouncers%5BjobName%5D%2Cwait%3E0%3FPolymer.Async.timeOut.after(wait)%3APolymer.Async.microTask%2Ccallback.bind(this))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20a%20named%20debouncer%20is%20active.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20debouncer%20is%20active%20(has%20not%20yet%20fired).%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isDebouncerActive'%2Cvalue%3Afunction%20isDebouncerActive(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Breturn!!(debouncer%26%26debouncer.isActive())%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Immediately%20calls%20the%20debouncer%20%60callback%60%20and%20inactivates%20it.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flushDebouncer'%2Cvalue%3Afunction%20flushDebouncer(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Bif(debouncer)%7Bdebouncer.flush()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20an%20active%20debouncer.%20%20The%20%60callback%60%20will%20not%20be%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20jobName%20The%20name%20of%20the%20debouncer%20started%20with%20%60debounce%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancelDebouncer'%2Cvalue%3Afunction%20cancelDebouncer(jobName)%7Bthis._debouncers%3Dthis._debouncers%7C%7C%7B%7D%3Bvar%20debouncer%3Dthis._debouncers%5BjobName%5D%3Bif(debouncer)%7Bdebouncer.cancel()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Runs%20a%20callback%20function%20asynchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20By%20default%20(if%20no%20waitTime%20is%20specified)%2C%20async%20callbacks%20are%20run%20at%0A%20%20%20%20%20%20%20*%20microtask%20timing%2C%20which%20will%20occur%20before%20paint.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%7D%20callback%20The%20callback%20function%20to%20run%2C%20bound%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20waitTime%20Time%20to%20wait%20before%20calling%20the%0A%20%20%20%20%20%20%20*%20%20%20%60callback%60.%20%20If%20unspecified%20or%200%2C%20the%20callback%20will%20be%20run%20at%20microtask%0A%20%20%20%20%20%20%20*%20%20%20timing%20(before%20paint).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20that%20may%20be%20used%20to%20cancel%20the%20async%20job.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'async'%2Cvalue%3Afunction%20async(callback%2CwaitTime)%7Breturn%20waitTime%3E0%3FPolymer.Async.timeOut.run(callback.bind(this)%2CwaitTime)%3A~Polymer.Async.microTask.run(callback.bind(this))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20an%20async%20operation%20started%20with%20%60async%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20original%20%60async%60%20call%20to%0A%20%20%20%20%20%20%20*%20%20%20cancel.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancelAsync'%2Cvalue%3Afunction%20cancelAsync(handle)%7Bhandle%3C0%3FPolymer.Async.microTask.cancel(~handle)%3APolymer.Async.timeOut.cancel(handle)%3B%7D%2F%2F%20other%0A%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20creating%20an%20element%20and%20configuring%20it.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20tag%20HTML%20element%20tag%20to%20create.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20props%20Object%20of%20properties%20to%20configure%20on%20the%0A%20%20%20%20%20%20%20*%20%20%20%20instance.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Element%7D%20Newly%20created%20and%20configured%20element.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'create'%2Cvalue%3Afunction%20create(tag%2Cprops)%7Bvar%20elt%3Ddocument.createElement(tag)%3Bif(props)%7Bif(elt.setProperties)%7Belt.setProperties(props)%3B%7Delse%7Bfor(var%20n%20in%20props)%7Belt%5Bn%5D%3Dprops%5Bn%5D%3B%7D%7D%7Dreturn%20elt%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20importing%20an%20HTML%20document%20imperatively.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20creates%20a%20new%20%60%3Clink%20rel%3D%22import%22%3E%60%20element%20with%0A%20%20%20%20%20%20%20*%20the%20provided%20URL%20and%20appends%20it%20to%20the%20document%20to%20start%20loading.%0A%20%20%20%20%20%20%20*%20In%20the%20%60onload%60%20callback%2C%20the%20%60import%60%20property%20of%20the%20%60link%60%0A%20%20%20%20%20%20%20*%20element%20will%20contain%20the%20imported%20document%20contents.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20href%20URL%20to%20document%20to%20load.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!Event)%3Avoid%3D%7D%20onload%20Callback%20to%20notify%20when%20an%20import%20successfully%0A%20%20%20%20%20%20%20*%20%20%20loaded.%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!ErrorEvent)%3Avoid%3D%7D%20onerror%20Callback%20to%20notify%20when%20an%20import%0A%20%20%20%20%20%20%20*%20%20%20unsuccessfully%20loaded.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20optAsync%20True%20if%20the%20import%20should%20be%20loaded%20%60async%60.%0A%20%20%20%20%20%20%20*%20%20%20Defaults%20to%20%60false%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!HTMLLinkElement%7D%20The%20link%20element%20for%20the%20URL%20to%20be%20loaded.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importHref'%2Cvalue%3Afunction%20importHref(href%2Conload%2Conerror%2CoptAsync)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Avar%20loadFn%3Donload%3Fonload.bind(this)%3Anull%3Bvar%20errorFn%3Donerror%3Fonerror.bind(this)%3Anull%3Breturn%20Polymer.importHref(href%2CloadFn%2CerrorFn%2CoptAsync)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Polyfill%20for%20Element.prototype.matches%2C%20which%20is%20sometimes%20still%0A%20%20%20%20%20%20%20*%20prefixed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20test.%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Element%3D%7D%20node%20Element%20to%20test%20the%20selector%20against.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20element%20matches%20the%20selector.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'elementMatches'%2Cvalue%3Afunction%20elementMatches(selector%2Cnode)%7Breturn%20Polymer.dom.matchesSelector(%2F**%20%40type%20%7B!Element%7D%20*%2Fnode%7C%7Cthis%2Cselector)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Toggles%20an%20HTML%20attribute%20on%20or%20off.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20HTML%20attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20bool%20Boolean%20to%20force%20the%20attribute%20on%20or%20off.%0A%20%20%20%20%20%20%20*%20%20%20%20When%20unspecified%2C%20the%20state%20of%20the%20attribute%20will%20be%20reversed.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Node%20to%20target.%20%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'toggleAttribute'%2Cvalue%3Afunction%20toggleAttribute(name%2Cbool%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bif(arguments.length%3D%3D1)%7Bbool%3D!node.hasAttribute(name)%3B%7Dif(bool)%7Bnode.setAttribute(name%2C'')%3B%7Delse%7Bnode.removeAttribute(name)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Toggles%20a%20CSS%20class%20on%20or%20off.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20CSS%20class%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20bool%20Boolean%20to%20force%20the%20class%20on%20or%20off.%0A%20%20%20%20%20%20%20*%20%20%20%20When%20unspecified%2C%20the%20state%20of%20the%20class%20will%20be%20reversed.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Node%20to%20target.%20%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'toggleClass'%2Cvalue%3Afunction%20toggleClass(name%2Cbool%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bif(arguments.length%3D%3D1)%7Bbool%3D!node.classList.contains(name)%3B%7Dif(bool)%7Bnode.classList.add(name)%3B%7Delse%7Bnode.classList.remove(name)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Cross-platform%20helper%20for%20setting%20an%20element's%20CSS%20%60transform%60%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20transformText%20Transform%20setting.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20the%20transform%20to.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'transform'%2Cvalue%3Afunction%20transform(transformText%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bnode.style.webkitTransform%3DtransformText%3Bnode.style.transform%3DtransformText%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Cross-platform%20helper%20for%20setting%20an%20element's%20CSS%20%60translate3d%60%0A%20%20%20%20%20%20%20*%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%20X%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%20Y%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20z%20Z%20offset.%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%3D%7D%20node%20Element%20to%20apply%20the%20transform%20to.%0A%20%20%20%20%20%20%20*%20Defaults%20to%20%60this%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'translate3d'%2Cvalue%3Afunction%20translate3d(x%2Cy%2Cz%2Cnode)%7Bnode%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%7C%7Cthis%3Bthis.transform('translate3d('%2Bx%2B'%2C'%2By%2B'%2C'%2Bz%2B')'%2Cnode)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20an%20array%2C%20if%20it%20exists.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20the%20array%20is%20specified%20by%20path%2C%20a%20change%20notification%20is%0A%20%20%20%20%20%20%20*%20generated%2C%20so%20that%20observers%2C%20data%20bindings%20and%20computed%0A%20%20%20%20%20%20%20*%20properties%20watching%20that%20path%20can%20update.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20the%20array%20is%20passed%20directly%2C%20**no%20change%0A%20%20%20%20%20%20%20*%20notification%20is%20generated**.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20arrayOrPath%20Path%20to%20array%20from%20which%20to%20remove%20the%20item%0A%20%20%20%20%20%20%20*%20%20%20(or%20the%20array%20itself).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20containing%20item%20removed.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'arrayDelete'%2Cvalue%3Afunction%20arrayDelete(arrayOrPath%2Citem)%7Bvar%20index%3Dvoid%200%3Bif(Array.isArray(arrayOrPath))%7Bindex%3DarrayOrPath.indexOf(item)%3Bif(index%3E%3D0)%7Breturn%20arrayOrPath.splice(index%2C1)%3B%7D%7Delse%7Bvar%20arr%3DPolymer.Path.get(this%2CarrayOrPath)%3Bindex%3Darr.indexOf(item)%3Bif(index%3E%3D0)%7Breturn%20this.splice(arrayOrPath%2Cindex%2C1)%3B%7D%7Dreturn%20null%3B%7D%2F%2F%20logging%0A%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.log%60%2F%60warn%60%2F%60error%60%20as%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20level%20One%20of%20'log'%2C%20'warn'%2C%20'error'%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_logger'%2Cvalue%3Afunction%20_logger(level%2Cargs)%7Bvar%20_console%3B%2F%2F%20accept%20%5B'foo'%2C%20'bar'%5D%20and%20%5B%5B'foo'%2C%20'bar'%5D%5D%0Aif(Array.isArray(args)%26%26args.length%3D%3D%3D1%26%26Array.isArray(args%5B0%5D))%7Bargs%3Dargs%5B0%5D%3B%7Dswitch(level)%7Bcase'log'%3Acase'warn'%3Acase'error'%3A(_console%3Dconsole)%5Blevel%5D.apply(_console%2C_toConsumableArray(args))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.log%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_log'%2Cvalue%3Afunction%20_log()%7Bfor(var%20_len%3Darguments.length%2Cargs%3DArray(_len)%2C_key%3D0%3B_key%3C_len%3B_key%2B%2B)%7Bargs%5B_key%5D%3Darguments%5B_key%5D%3B%7Dthis._logger('log'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.warn%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_warn'%2Cvalue%3Afunction%20_warn()%7Bfor(var%20_len2%3Darguments.length%2Cargs%3DArray(_len2)%2C_key2%3D0%3B_key2%3C_len2%3B_key2%2B%2B)%7Bargs%5B_key2%5D%3Darguments%5B_key2%5D%3B%7Dthis._logger('warn'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Facades%20%60console.error%60%20as%20an%20override%20point.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_error'%2Cvalue%3Afunction%20_error()%7Bfor(var%20_len3%3Darguments.length%2Cargs%3DArray(_len3)%2C_key3%3D0%3B_key3%3C_len3%3B_key3%2B%2B)%7Bargs%5B_key3%5D%3Darguments%5B_key3%5D%3B%7Dthis._logger('error'%2Cargs)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Formats%20a%20message%20using%20the%20element%20type%20an%20a%20method%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Method%20name%20to%20associate%20with%20message%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20args%20Array%20of%20strings%20or%20objects%20to%20log%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20with%20formatting%20information%20for%20%60console%60%0A%20%20%20%20%20%20%20*%20%20%20logging.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_logf'%2Cvalue%3Afunction%20_logf(methodName)%7Bfor(var%20_len4%3Darguments.length%2Cargs%3DArray(_len4%3E1%3F_len4-1%3A0)%2C_key4%3D1%3B_key4%3C_len4%3B_key4%2B%2B)%7Bargs%5B_key4-1%5D%3Darguments%5B_key4%5D%3B%7Dreturn%5B'%5B%25s%3A%3A%25s%5D'%2Cthis.is%2CmethodName%5D.concat(args)%3B%7D%7D%2C%7Bkey%3A'domHost'%2Cget%3Afunction%20get()%7Bvar%20root%3Dthis.getRootNode()%3Breturn%20root%20instanceof%20DocumentFragment%3F%2F**%20%40type%20%7BShadowRoot%7D%20*%2Froot.host%3Aroot%3B%7D%7D%5D%2C%5B%7Bkey%3A'importMeta'%2Cget%3Afunction%20get()%7Breturn%20this.prototype.importMeta%3B%7D%7D%5D)%3Breturn%20LegacyElement%3B%7D(legacyElementBase)%3BLegacyElement.prototype.is%3D''%3Breturn%20LegacyElement%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Flegacy-element-mixin.html.js%0A",
            "totalBytes": 37092,
            "wastedBytes": 24461,
            "wastedPercent": 65.94683489701283
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20builtCSS%3Dwindow.ShadyCSS%26%26window.ShadyCSS%5B'cssBuild'%5D%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20the%20core%20API%20for%20Polymer's%20meta-programming%0A%20%20%20*%20features%20including%20template%20stamping%2C%20data-binding%2C%20attribute%20deserialization%2C%0A%20%20%20*%20and%20property%20change%20observation.%0A%20%20%20*%0A%20%20%20*%20Subclassers%20may%20provide%20the%20following%20static%20getters%20to%20return%20metadata%0A%20%20%20*%20used%20to%20configure%20Polymer's%20features%20for%20the%20class%3A%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20is()%60%3A%20When%20the%20template%20is%20provided%20via%20a%20%60dom-module%60%2C%0A%20%20%20*%20%20%20users%20should%20return%20the%20%60dom-module%60%20id%20from%20a%20static%20%60is%60%20getter.%20%20If%0A%20%20%20*%20%20%20no%20template%20is%20needed%20or%20the%20template%20is%20provided%20directly%20via%20the%0A%20%20%20*%20%20%20%60template%60%20getter%2C%20there%20is%20no%20need%20to%20define%20%60is%60%20for%20the%20element.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20template()%60%3A%20Users%20may%20provide%20the%20template%20directly%20(as%0A%20%20%20*%20%20%20opposed%20to%20via%20%60dom-module%60)%20by%20implementing%20a%20static%20%60template%60%20getter.%0A%20%20%20*%20%20%20The%20getter%20may%20return%20an%20%60HTMLTemplateElement%60%20or%20a%20string%2C%20which%20will%0A%20%20%20*%20%20%20automatically%20be%20parsed%20into%20a%20template.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20properties()%60%3A%20Should%20return%20an%20object%20describing%0A%20%20%20*%20%20%20property-related%20metadata%20used%20by%20Polymer%20features%20(key%3A%20property%20name%0A%20%20%20*%20%20%20value%3A%20object%20containing%20property%20metadata).%20Valid%20keys%20in%20per-property%0A%20%20%20*%20%20%20metadata%20include%3A%0A%20%20%20*%20%20%20-%20%60type%60%20(String%7CNumber%7CObject%7CArray%7C...)%3A%20Used%20by%0A%20%20%20*%20%20%20%20%20%60attributeChangedCallback%60%20to%20determine%20how%20string-based%20attributes%0A%20%20%20*%20%20%20%20%20are%20deserialized%20to%20JavaScript%20property%20values.%0A%20%20%20*%20%20%20-%20%60notify%60%20(boolean)%3A%20Causes%20a%20change%20in%20the%20property%20to%20fire%20a%0A%20%20%20*%20%20%20%20%20non-bubbling%20event%20called%20%60%3Cproperty%3E-changed%60.%20Elements%20that%20have%0A%20%20%20*%20%20%20%20%20enabled%20two-way%20binding%20to%20the%20property%20use%20this%20event%20to%20observe%20changes.%0A%20%20%20*%20%20%20-%20%60readOnly%60%20(boolean)%3A%20Creates%20a%20getter%20for%20the%20property%2C%20but%20no%20setter.%0A%20%20%20*%20%20%20%20%20To%20set%20a%20read-only%20property%2C%20use%20the%20private%20setter%20method%0A%20%20%20*%20%20%20%20%20%60_setProperty(property%2C%20value)%60.%0A%20%20%20*%20%20%20-%20%60observer%60%20(string)%3A%20Observer%20method%20name%20that%20will%20be%20called%20when%0A%20%20%20*%20%20%20%20%20the%20property%20changes.%20The%20arguments%20of%20the%20method%20are%0A%20%20%20*%20%20%20%20%20%60(value%2C%20previousValue)%60.%0A%20%20%20*%20%20%20-%20%60computed%60%20(string)%3A%20String%20describing%20method%20and%20dependent%20properties%0A%20%20%20*%20%20%20%20%20for%20computing%20the%20value%20of%20this%20property%20(e.g.%20%60'computeFoo(bar%2C%20zot)'%60).%0A%20%20%20*%20%20%20%20%20Computed%20properties%20are%20read-only%20by%20default%20and%20can%20only%20be%20changed%0A%20%20%20*%20%20%20%20%20via%20the%20return%20value%20of%20the%20computing%20method.%0A%20%20%20*%0A%20%20%20*%20-%20%60static%20get%20observers()%60%3A%20Array%20of%20strings%20describing%20multi-property%0A%20%20%20*%20%20%20observer%20methods%20and%20their%20dependent%20properties%20(e.g.%0A%20%20%20*%20%20%20%60'observeABC(a%2C%20b%2C%20c)'%60).%0A%20%20%20*%0A%20%20%20*%20The%20base%20class%20provides%20default%20implementations%20for%20the%20following%20standard%0A%20%20%20*%20custom%20element%20lifecycle%20callbacks%3B%20users%20may%20override%20these%2C%20but%20should%0A%20%20%20*%20call%20the%20super%20method%20to%20ensure%0A%20%20%20*%20-%20%60constructor%60%3A%20Run%20when%20the%20element%20is%20created%20or%20upgraded%0A%20%20%20*%20-%20%60connectedCallback%60%3A%20Run%20each%20time%20the%20element%20is%20connected%20to%20the%0A%20%20%20*%20%20%20document%0A%20%20%20*%20-%20%60disconnectedCallback%60%3A%20Run%20each%20time%20the%20element%20is%20disconnected%20from%0A%20%20%20*%20%20%20the%20document%0A%20%20%20*%20-%20%60attributeChangedCallback%60%3A%20Run%20each%20time%20an%20attribute%20in%0A%20%20%20*%20%20%20%60observedAttributes%60%20is%20set%20or%20removed%20(note%3A%20this%20element's%20default%0A%20%20%20*%20%20%20%60observedAttributes%60%20implementation%20will%20automatically%20return%20an%20array%0A%20%20%20*%20%20%20of%20dash-cased%20attributes%20based%20on%20%60properties%60)%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40property%20rootPath%20%7Bstring%7D%20Set%20to%20the%20value%20of%20%60Polymer.rootPath%60%2C%0A%20%20%20*%20%20%20which%20defaults%20to%20the%20main%20document%20path%0A%20%20%20*%20%40property%20importPath%20%7Bstring%7D%20Set%20to%20the%20value%20of%20the%20class's%20static%0A%20%20%20*%20%20%20%60importPath%60%20property%2C%20which%20defaults%20to%20the%20path%20of%20this%20element's%0A%20%20%20*%20%20%20%60dom-module%60%20(when%20%60is%60%20is%20used)%2C%20but%20can%20be%20overridden%20for%20other%0A%20%20%20*%20%20%20import%20strategies.%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20the%20core%20API%20for%20Polymer's%0A%20%20%20*%20meta-programming%20features.%0A%20%20%20*%2FPolymer.ElementMixin%3DPolymer.dedupingMixin(function(base)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20polymerElementBase%3DPolymer.PropertiesMixin(Polymer.PropertyEffects(base))%3B%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20properties%20with%20default%20values.%0A%20%20%20%20%20*%20This%20list%20is%20created%20as%20an%20optimization%20since%20it%20is%20a%20subset%20of%0A%20%20%20%20%20*%20the%20list%20returned%20from%20%60_properties%60.%0A%20%20%20%20%20*%20This%20list%20is%20used%20in%20%60_initializeProperties%60%20to%20set%20property%20defaults.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20constructor%20Element%20class%0A%20%20%20%20%20*%20%40return%20%7BPolymerElementProperties%7D%20Flattened%20properties%20for%20this%20class%0A%20%20%20%20%20*%20%20%20that%20have%20default%20values%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20propertyDefaults(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__propertyDefaults'%2Cconstructor)))%7Bconstructor.__propertyDefaults%3Dnull%3Bvar%20props%3Dconstructor._properties%3Bfor(var%20p%20in%20props)%7Bvar%20info%3Dprops%5Bp%5D%3Bif('value'in%20info)%7Bconstructor.__propertyDefaults%3Dconstructor.__propertyDefaults%7C%7C%7B%7D%3Bconstructor.__propertyDefaults%5Bp%5D%3Dinfo%3B%7D%7D%7Dreturn%20constructor.__propertyDefaults%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20the%20%60observers%60%20array.%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20constructor%20Element%20class%0A%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20containing%20own%20observers%20for%20the%20given%20class%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Ffunction%20ownObservers(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownObservers'%2Cconstructor)))%7Bconstructor.__ownObservers%3Dconstructor.hasOwnProperty(JSCompiler_renameProperty('observers'%2Cconstructor))%3F%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fconstructor.observers%3Anull%3B%7Dreturn%20constructor.__ownObservers%3B%7D%2F**%0A%20%20%20%20%20*%20Creates%20effects%20for%20a%20property.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%2C%20once%20a%20property%20has%20been%20set%20to%0A%20%20%20%20%20*%20%60readOnly%60%2C%20%60computed%60%2C%20%60reflectToAttribute%60%2C%20or%20%60notify%60%0A%20%20%20%20%20*%20these%20values%20may%20not%20be%20changed.%20For%20example%2C%20a%20subclass%20cannot%0A%20%20%20%20%20*%20alter%20these%20settings.%20However%2C%20additional%20%60observers%60%20may%20be%20added%0A%20%20%20%20%20*%20by%20subclasses.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20info%20object%20should%20contain%20property%20metadata%20as%20follows%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60type%60%3A%20%7Bfunction%7D%20type%20to%20which%20an%20attribute%20matching%20the%20property%0A%20%20%20%20%20*%20is%20deserialized.%20Note%20the%20property%20is%20camel-cased%20from%20a%20dash-cased%0A%20%20%20%20%20*%20attribute.%20For%20example%2C%20'foo-bar'%20attribute%20is%20deserialized%20to%20a%0A%20%20%20%20%20*%20property%20named%20'fooBar'.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60readOnly%60%3A%20%7Bboolean%7D%20creates%20a%20readOnly%20property%20and%0A%20%20%20%20%20*%20makes%20a%20private%20setter%20for%20the%20private%20of%20the%20form%20'_setFoo'%20for%20a%0A%20%20%20%20%20*%20property%20'foo'%2C%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60computed%60%3A%20%7Bstring%7D%20creates%20a%20computed%20property.%20A%20computed%20property%0A%20%20%20%20%20*%20is%20also%20automatically%20set%20to%20%60readOnly%3A%20true%60.%20The%20value%20is%20calculated%0A%20%20%20%20%20*%20by%20running%20a%20method%20and%20arguments%20parsed%20from%20the%20given%20string.%20For%0A%20%20%20%20%20*%20example%20'compute(foo)'%20will%20compute%20a%20given%20property%20when%20the%0A%20%20%20%20%20*%20'foo'%20property%20changes%20by%20executing%20the%20'compute'%20method.%20This%20method%0A%20%20%20%20%20*%20must%20return%20the%20computed%20value.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60reflectToAttribute%60%3A%20%7Bboolean%7D%20If%20true%2C%20the%20property%20value%20is%20reflected%0A%20%20%20%20%20*%20to%20an%20attribute%20of%20the%20same%20name.%20Note%2C%20the%20attribute%20is%20dash-cased%0A%20%20%20%20%20*%20so%20a%20property%20named%20'fooBar'%20is%20reflected%20as%20'foo-bar'.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20%60notify%60%3A%20%7Bboolean%7D%20sends%20a%20non-bubbling%20notification%20event%20when%0A%20%20%20%20%20*%20the%20property%20changes.%20For%20example%2C%20a%20property%20named%20'foo'%20sends%20an%0A%20%20%20%20%20*%20event%20named%20'foo-changed'%20with%20%60event.detail%60%20set%20to%20the%20value%20of%0A%20%20%20%20%20*%20the%20property.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20*%20observer%3A%20%7Bstring%7D%20name%20of%20a%20method%20that%20runs%20when%20the%20property%0A%20%20%20%20%20*%20changes.%20The%20arguments%20of%20the%20method%20are%20(value%2C%20previousValue).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20Users%20may%20want%20control%20over%20modifying%20property%0A%20%20%20%20%20*%20effects%20via%20subclassing.%20For%20example%2C%20a%20user%20might%20want%20to%20make%20a%0A%20%20%20%20%20*%20reflectToAttribute%20property%20not%20do%20so%20in%20a%20subclass.%20We've%20chosen%20to%0A%20%20%20%20%20*%20disable%20this%20because%20it%20leads%20to%20additional%20complication.%0A%20%20%20%20%20*%20For%20example%2C%20a%20readOnly%20effect%20generates%20a%20special%20setter.%20If%20a%20subclass%0A%20%20%20%20%20*%20disables%20the%20effect%2C%20the%20setter%20would%20fail%20unexpectedly.%0A%20%20%20%20%20*%20Based%20on%20feedback%2C%20we%20may%20want%20to%20try%20to%20make%20effects%20more%20malleable%0A%20%20%20%20%20*%20and%2For%20provide%20an%20advanced%20api%20for%20manipulating%20them.%0A%20%20%20%20%20*%20Also%20consider%20adding%20warnings%20when%20an%20effect%20cannot%20be%20changed.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PolymerElement%7D%20proto%20Element%20class%20prototype%20to%20add%20accessors%0A%20%20%20%20%20*%20%20%20and%20effects%20to%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20the%20property.%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20info%20Info%20object%20from%20which%20to%20create%20property%20effects.%0A%20%20%20%20%20*%20Supported%20keys%3A%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20allProps%20Flattened%20map%20of%20all%20properties%20defined%20in%20this%0A%20%20%20%20%20*%20%20%20element%20(including%20inherited%20properties)%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20createPropertyFromConfig(proto%2Cname%2Cinfo%2CallProps)%7B%2F%2F%20computed%20forces%20readOnly...%0Aif(info.computed)%7Binfo.readOnly%3Dtrue%3B%7D%2F%2F%20Note%2C%20since%20all%20computed%20properties%20are%20readOnly%2C%20this%20prevents%0A%2F%2F%20adding%20additional%20computed%20property%20effects%20(which%20leads%20to%20a%20confusing%0A%2F%2F%20setup%20where%20multiple%20triggers%20for%20setting%20a%20property)%0A%2F%2F%20While%20we%20do%20have%20%60hasComputedEffect%60%20this%20is%20set%20on%20the%20property's%0A%2F%2F%20dependencies%20rather%20than%20itself.%0Aif(info.computed%26%26!proto._hasReadOnlyEffect(name))%7Bproto._createComputedProperty(name%2Cinfo.computed%2CallProps)%3B%7Dif(info.readOnly%26%26!proto._hasReadOnlyEffect(name))%7Bproto._createReadOnlyProperty(name%2C!info.computed)%3B%7Dif(info.reflectToAttribute%26%26!proto._hasReflectEffect(name))%7Bproto._createReflectedProperty(name)%3B%7Dif(info.notify%26%26!proto._hasNotifyEffect(name))%7Bproto._createNotifyingProperty(name)%3B%7D%2F%2F%20always%20add%20observer%0Aif(info.observer)%7Bproto._createPropertyObserver(name%2Cinfo.observer%2CallProps%5Binfo.observer%5D)%3B%7D%2F%2F%20always%20create%20the%20mapping%20from%20attribute%20back%20to%20property%20for%20deserialization.%0Aproto._addPropertyToAttributeMap(name)%3B%7D%2F**%0A%20%20%20%20%20*%20Process%20all%20style%20elements%20in%20the%20element%20template.%20Styles%20with%20the%0A%20%20%20%20%20*%20%60include%60%20attribute%20are%20processed%20such%20that%20any%20styles%20in%0A%20%20%20%20%20*%20the%20associated%20%22style%20modules%22%20are%20included%20in%20the%20element%20template.%0A%20%20%20%20%20*%20%40param%20%7BPolymerElementConstructor%7D%20klass%20Element%20class%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20process%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20is%20Name%20of%20element%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20for%20element%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20processElementStyles(klass%2Ctemplate%2Cis%2CbaseURI)%7Bif(!builtCSS)%7Bvar%20templateStyles%3Dtemplate.content.querySelectorAll('style')%3Bvar%20stylesWithImports%3DPolymer.StyleGather.stylesFromTemplate(template)%3B%2F%2F%20insert%20styles%20from%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%20at%20the%20top%20of%20the%20template%0Avar%20linkedStyles%3DPolymer.StyleGather.stylesFromModuleImports(is)%3Bvar%20firstTemplateChild%3Dtemplate.content.firstElementChild%3Bfor(var%20idx%3D0%3Bidx%3ClinkedStyles.length%3Bidx%2B%2B)%7Bvar%20s%3DlinkedStyles%5Bidx%5D%3Bs.textContent%3Dklass._processStyleText(s.textContent%2CbaseURI)%3Btemplate.content.insertBefore(s%2CfirstTemplateChild)%3B%7D%2F%2F%20keep%20track%20of%20the%20last%20%22concrete%22%20style%20in%20the%20template%20we%20have%20encountered%0Avar%20templateStyleIndex%3D0%3B%2F%2F%20ensure%20all%20gathered%20styles%20are%20actually%20in%20this%20template.%0Afor(var%20i%3D0%3Bi%3CstylesWithImports.length%3Bi%2B%2B)%7Bvar%20_s%3DstylesWithImports%5Bi%5D%3Bvar%20templateStyle%3DtemplateStyles%5BtemplateStyleIndex%5D%3B%2F%2F%20if%20the%20style%20is%20not%20in%20this%20template%2C%20it's%20been%20%22included%22%20and%0A%2F%2F%20we%20put%20a%20clone%20of%20it%20in%20the%20template%20before%20the%20style%20that%20included%20it%0Aif(templateStyle!%3D%3D_s)%7B_s%3D_s.cloneNode(true)%3BtemplateStyle.parentNode.insertBefore(_s%2CtemplateStyle)%3B%7Delse%7BtemplateStyleIndex%2B%2B%3B%7D_s.textContent%3Dklass._processStyleText(_s.textContent%2CbaseURI)%3B%7D%7Dif(window.ShadyCSS)%7Bwindow.ShadyCSS.prepareTemplate(template%2Cis)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Look%20up%20template%20from%20dom-module%20for%20element%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!string%7D%20is%20Element%20name%20to%20look%20up%0A%20%20%20%20%20*%20%40return%20%7B!HTMLTemplateElement%7D%20Template%20found%20in%20dom%20module%2C%20or%0A%20%20%20%20%20*%20%20%20undefined%20if%20not%20found%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2Ffunction%20getTemplateFromDomModule(is)%7Bvar%20template%3Dnull%3Bif(is%26%26Polymer.DomModule)%7Btemplate%3DPolymer.DomModule.import(is%2C'template')%3B%2F%2F%20Under%20strictTemplatePolicy%2C%20require%20any%20element%20with%20an%20%60is%60%0A%2F%2F%20specified%20to%20have%20a%20dom-module%0Aif(Polymer.strictTemplatePolicy%26%26!template)%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20expecting%20dom-module%20or%20null%20template%20for%20'%2Bis)%3B%7D%7Dreturn%20template%3B%7D%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%2Fvar%20PolymerElement%3Dfunction(_polymerElementBase)%7B_inherits(PolymerElement%2C_polymerElementBase)%3B_createClass(PolymerElement%2Cnull%2C%5B%7Bkey%3A'_finalizeClass'%2C%2F**%0A%20%20%20%20%20%20%20*%20Override%20of%20PropertiesMixin%20_finalizeClass%20to%20create%20observers%20and%0A%20%20%20%20%20%20%20*%20find%20the%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_finalizeClass()%7B_get(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)%2C'_finalizeClass'%2Cthis).call(this)%3Bvar%20observers%3DownObservers(this)%3Bif(observers)%7Bthis.createObservers(observers%2Cthis._properties)%3B%7Dthis._prepareTemplate()%3B%7D%7D%2C%7Bkey%3A'_prepareTemplate'%2Cvalue%3Afunction%20_prepareTemplate()%7B%2F%2F%20note%3A%20create%20%22working%22%20template%20that%20is%20finalized%20at%20instance%20time%0Avar%20template%3D%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fthis.template%3Bif(template)%7Bif(typeof%20template%3D%3D%3D'string')%7Bvar%20t%3Ddocument.createElement('template')%3Bt.innerHTML%3Dtemplate%3Btemplate%3Dt%3B%7Delse%20if(!Polymer.legacyOptimizations)%7Btemplate%3Dtemplate.cloneNode(true)%3B%7D%7Dthis.prototype._template%3Dtemplate%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20of%20PropertiesChanged%20createProperties%20to%20create%20accessors%0A%20%20%20%20%20%20%20*%20and%20property%20effects%20for%20all%20of%20the%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createProperties'%2Cvalue%3Afunction%20createProperties(props)%7Bfor(var%20p%20in%20props)%7BcreatePropertyFromConfig(this.prototype%2Cp%2Cprops%5Bp%5D%2Cprops)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20observers%20for%20the%20given%20%60observers%60%20array.%0A%20%20%20%20%20%20%20*%20Leverages%20%60PropertyEffects%60%20to%20create%20observers.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20observers%20Array%20of%20observer%20descriptors%20for%0A%20%20%20%20%20%20%20*%20%20%20this%20class%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20dynamicFns%20Object%20containing%20keys%20for%20any%20properties%0A%20%20%20%20%20%20%20*%20%20%20that%20are%20functions%20and%20should%20trigger%20the%20effect%20when%20the%20function%0A%20%20%20%20%20%20%20*%20%20%20reference%20is%20changed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createObservers'%2Cvalue%3Afunction%20createObservers(observers%2CdynamicFns)%7Bvar%20proto%3Dthis.prototype%3Bfor(var%20i%3D0%3Bi%3Cobservers.length%3Bi%2B%2B)%7Bproto._createMethodObserver(observers%5Bi%5D%2CdynamicFns)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20that%20will%20be%20stamped%20into%20this%20element's%20shadow%20root.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20a%20%60static%20get%20is()%60%20getter%20is%20defined%2C%20the%20default%20implementation%0A%20%20%20%20%20%20%20*%20will%20return%20the%20first%20%60%3Ctemplate%3E%60%20in%20a%20%60dom-module%60%20whose%20%60id%60%0A%20%20%20%20%20%20%20*%20matches%20this%20element's%20%60is%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20getter%20to%20return%20an%20arbitrary%20template%0A%20%20%20%20%20%20%20*%20(in%20which%20case%20the%20%60is%60%20getter%20is%20unnecessary).%20The%20template%20returned%0A%20%20%20%20%20%20%20*%20may%20be%20either%20an%20%60HTMLTemplateElement%60%20or%20a%20string%20that%20will%20be%0A%20%20%20%20%20%20%20*%20automatically%20parsed%20into%20a%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20when%20subclassing%2C%20if%20the%20super%20class%20overrode%20the%20default%0A%20%20%20%20%20%20%20*%20implementation%20and%20the%20subclass%20would%20like%20to%20provide%20an%20alternate%0A%20%20%20%20%20%20%20*%20template%20via%20a%20%60dom-module%60%2C%20it%20should%20override%20this%20getter%20and%0A%20%20%20%20%20%20%20*%20return%20%60Polymer.DomModule.import(this.is%2C%20'template')%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20If%20a%20subclass%20would%20like%20to%20modify%20the%20super%20class%20template%2C%20it%20should%0A%20%20%20%20%20%20%20*%20clone%20it%20rather%20than%20modify%20it%20in%20place.%20%20If%20the%20getter%20does%20expensive%0A%20%20%20%20%20%20%20*%20work%20such%20as%20cloning%2Fmodifying%20a%20template%2C%20it%20should%20memoize%20the%0A%20%20%20%20%20%20%20*%20template%20for%20maximum%20performance%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20let%20memoizedTemplate%3B%0A%20%20%20%20%20%20%20*%20%20%20class%20MySubClass%20extends%20MySuperClass%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20if%20(!memoizedTemplate)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20memoizedTemplate%20%3D%20MySuperClass.template.cloneNode(true)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20let%20subContent%20%3D%20document.createElement('div')%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20subContent.textContent%20%3D%20'This%20came%20from%20MySubClass'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20memoizedTemplate.content.appendChild(subContent)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20return%20memoizedTemplate%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7BHTMLTemplateElement%7Cstring%7D%20Template%20to%20be%20stamped%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7B%2F%2F%20Explanation%20of%20template-related%20properties%3A%0A%2F%2F%20-%20constructor.template%20(this%20getter)%3A%20the%20template%20for%20the%20class.%0A%2F%2F%20%20%20%20%20This%20can%20come%20from%20the%20prototype%20(for%20legacy%20elements)%2C%20from%20a%0A%2F%2F%20%20%20%20%20dom-module%2C%20or%20from%20the%20super%20class's%20template%20(or%20can%20be%20overridden%0A%2F%2F%20%20%20%20%20altogether%20by%20the%20user)%0A%2F%2F%20-%20constructor._template%3A%20memoized%20version%20of%20constructor.template%0A%2F%2F%20-%20prototype._template%3A%20working%20template%20for%20the%20element%2C%20which%20will%20be%0A%2F%2F%20%20%20%20%20parsed%20and%20modified%20in%20place.%20It%20is%20a%20cloned%20version%20of%0A%2F%2F%20%20%20%20%20constructor.template%2C%20saved%20in%20_finalizeClass().%20Note%20that%20before%0A%2F%2F%20%20%20%20%20this%20getter%20is%20called%2C%20for%20legacy%20elements%20this%20could%20be%20from%20a%0A%2F%2F%20%20%20%20%20_template%20field%20on%20the%20info%20object%20passed%20to%20Polymer()%2C%20a%20behavior%2C%0A%2F%2F%20%20%20%20%20or%20set%20in%20registered()%3B%20once%20the%20static%20getter%20runs%2C%20a%20clone%20of%20it%0A%2F%2F%20%20%20%20%20will%20overwrite%20it%20on%20the%20prototype%20as%20the%20working%20template.%0Aif(!this.hasOwnProperty(JSCompiler_renameProperty('_template'%2Cthis)))%7Bthis._template%3D%2F%2F%20If%20user%20has%20put%20template%20on%20prototype%20(e.g.%20in%20legacy%20via%20registered%0A%2F%2F%20callback%20or%20info%20object)%2C%20prefer%20that%20first%0Athis.prototype.hasOwnProperty(JSCompiler_renameProperty('_template'%2Cthis.prototype))%3Fthis.prototype._template%3A%2F%2F%20Look%20in%20dom-module%20associated%20with%20this%20element's%20is%0AgetTemplateFromDomModule(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.is)%7C%7C%2F%2F%20Next%20look%20for%20superclass%20template%20(call%20the%20super%20impl%20this%0A%2F%2F%20way%20so%20that%20%60this%60%20points%20to%20the%20superclass)%0AObject.getPrototypeOf(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.prototype).constructor.template%3B%7Dreturn%20this._template%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Set%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7Cstring%7D%20value%20Template%20to%20set.%0A%20%20%20%20%20%20%20*%2F%2Cset%3Afunction%20set(value)%7Bthis._template%3Dvalue%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Path%20matching%20the%20url%20from%20which%20the%20element%20was%20imported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20path%20is%20used%20to%20resolve%20url's%20in%20template%20style%20cssText.%0A%20%20%20%20%20%20%20*%20The%20%60importPath%60%20property%20is%20also%20set%20on%20element%20instances%20and%20can%20be%0A%20%20%20%20%20%20%20*%20used%20to%20create%20bindings%20relative%20to%20the%20import%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20For%20elements%20defined%20in%20ES%20modules%2C%20users%20should%20implement%0A%20%20%20%20%20%20%20*%20%60static%20get%20importMeta()%20%7B%20return%20import.meta%3B%20%7D%60%2C%20and%20the%20default%0A%20%20%20%20%20%20%20*%20implementation%20of%20%60importPath%60%20will%20%20return%20%60import.meta.url%60's%20path.%0A%20%20%20%20%20%20%20*%20For%20elements%20defined%20in%20HTML%20imports%2C%20this%20getter%20will%20return%20the%20path%0A%20%20%20%20%20%20%20*%20to%20the%20document%20containing%20a%20%60dom-module%60%20element%20matching%20this%0A%20%20%20%20%20%20%20*%20element's%20static%20%60is%60%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20this%20path%20should%20contain%20a%20trailing%20%60%2F%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20The%20import%20path%20for%20this%20element%20class%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importPath'%2Cget%3Afunction%20get()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('_importPath'%2Cthis)))%7Bvar%20meta%3Dthis.importMeta%3Bif(meta)%7Bthis._importPath%3DPolymer.ResolveUrl.pathFromUrl(meta.url)%3B%7Delse%7Bvar%20module%3DPolymer.DomModule%26%26Polymer.DomModule.import(%2F**%20%40type%20%7BPolymerElementConstructor%7D%20*%2Fthis.is)%3Bthis._importPath%3Dmodule%26%26module.assetpath%7C%7CObject.getPrototypeOf(%2F**%20%40type%20%7BPolymerElementConstructor%7D*%2Fthis.prototype).constructor.importPath%3B%7D%7Dreturn%20this._importPath%3B%7D%7D%5D)%3Bfunction%20PolymerElement()%7B_classCallCheck(this%2CPolymerElement)%3B%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)).call(this))%3B_this._template%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this._importPath%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this.rootPath%3B%2F**%20%40type%20%7Bstring%7D%20*%2F_this.importPath%3B%2F**%20%40type%20%7BStampedTemplate%20%7C%20HTMLElement%20%7C%20ShadowRoot%7D%20*%2F_this.root%3B%2F**%20%40type%20%7B!Object%3Cstring%2C%20!Element%3E%7D%20*%2F_this.%24%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20default%20%60Polymer.PropertyAccessors%60%20to%20ensure%20class%0A%20%20%20%20%20%20%20*%20metaprogramming%20related%20to%20property%20accessors%20and%20effects%20has%0A%20%20%20%20%20%20%20*%20completed%20(calls%20%60finalize%60).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20It%20also%20initializes%20any%20property%20defaults%20provided%20via%20%60value%60%20in%0A%20%20%20%20%20%20%20*%20%60properties%60%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F_createClass(PolymerElement%2C%5B%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7Bthis.constructor.finalize()%3B%2F%2F%20note%3A%20finalize%20template%20when%20we%20have%20access%20to%20%60localName%60%20to%0A%2F%2F%20avoid%20dependence%20on%20%60is%60%20for%20polyfilling%20styling.%0Athis.constructor._finalizeTemplate(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis.localName)%3B_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%2F%2F%20set%20path%20defaults%0Athis.rootPath%3DPolymer.rootPath%3Bthis.importPath%3Dthis.constructor.importPath%3B%2F%2F%20apply%20property%20defaults...%0Avar%20p%24%3DpropertyDefaults(this.constructor)%3Bif(!p%24)%7Breturn%3B%7Dfor(var%20p%20in%20p%24)%7Bvar%20info%3Dp%24%5Bp%5D%3B%2F%2F%20Don't%20set%20default%20value%20if%20there%20is%20already%20an%20own%20property%2C%20which%0A%2F%2F%20happens%20when%20a%20%60properties%60%20property%20with%20default%20but%20no%20effects%20had%0A%2F%2F%20a%20property%20set%20(e.g.%20bound)%20by%20its%20host%20before%20upgrade%0Aif(!this.hasOwnProperty(p))%7Bvar%20value%3Dtypeof%20info.value%3D%3D'function'%3Finfo.value.call(this)%3Ainfo.value%3B%2F%2F%20Set%20via%20%60_setProperty%60%20if%20there%20is%20an%20accessor%2C%20to%20enable%0A%2F%2F%20initializing%20readOnly%20property%20defaults%0Aif(this._hasAccessor(p))%7Bthis._setPendingProperty(p%2Cvalue%2Ctrue)%3B%7Delse%7Bthis%5Bp%5D%3Dvalue%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20style%20text%20for%20a%20style%20element%20in%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20cssText%20Text%20containing%20styling%20to%20process%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20rebase%20CSS%20paths%20against%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20The%20processed%20CSS%20text%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2C%2F**%0A%20%20%20%20%20%20%20*%20Provides%20a%20default%20implementation%20of%20the%20standard%20Custom%20Elements%0A%20%20%20%20%20%20%20*%20%60connectedCallback%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20enables%20the%20property%20effects%20system%20and%0A%20%20%20%20%20%20%20*%20flushes%20any%20pending%20properties%2C%20and%20updates%20shimmed%20CSS%20properties%0A%20%20%20%20%20%20%20*%20when%20using%20the%20ShadyCSS%20scoping%2Fcustom%20properties%20polyfill.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%2C%20invalidCasts%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20connectedCallback()%7Bif(window.ShadyCSS%26%26this._template)%7Bwindow.ShadyCSS.styleElement(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis)%3B%7D_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bif(this._template)%7Bthis.root%3Dthis._stampTemplate(this._template)%3Bthis.%24%3Dthis.root.%24%3B%7D_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'ready'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyEffects%60's%20%60_readyClients%60%20call.%20Attaches%0A%20%20%20%20%20%20%20*%20element%20dom%20by%20calling%20%60_attachDom%60%20with%20the%20dom%20stamped%20from%20the%0A%20%20%20%20%20%20%20*%20element's%20template%20via%20%60_stampTemplate%60.%20Note%20that%20this%20allows%0A%20%20%20%20%20%20%20*%20client%20dom%20to%20be%20attached%20to%20the%20element%20prior%20to%20any%20observers%0A%20%20%20%20%20%20%20*%20running.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bif(this._template)%7Bthis.root%3Dthis._attachDom(%2F**%20%40type%20%7BStampedTemplate%7D%20*%2Fthis.root)%3B%7D%2F%2F%20The%20super._readyClients%20here%20sets%20the%20clients%20initialized%20flag.%0A%2F%2F%20We%20must%20wait%20to%20do%20this%20until%20after%20client%20dom%20is%20created%2Fattached%0A%2F%2F%20so%20that%20this%20flag%20can%20be%20checked%20to%20prevent%20notifications%20fired%0A%2F%2F%20during%20this%20process%20from%20being%20handled%20before%20clients%20are%20ready.%0A_get(PolymerElement.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerElement.prototype)%2C'_readyClients'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Attaches%20an%20element's%20stamped%20dom%20to%20itself.%20By%20default%2C%0A%20%20%20%20%20%20%20*%20this%20method%20creates%20a%20%60shadowRoot%60%20and%20adds%20the%20dom%20to%20it.%0A%20%20%20%20%20%20%20*%20However%2C%20this%20method%20may%20be%20overridden%20to%20allow%20an%20element%0A%20%20%20%20%20%20%20*%20to%20put%20its%20dom%20in%20another%20location.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40throws%20%7BError%7D%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingReturn%7D%0A%20%20%20%20%20%20%20*%20%40param%20%7BStampedTemplate%7D%20dom%20to%20attach%20to%20the%20element.%0A%20%20%20%20%20%20%20*%20%40return%20%7BShadowRoot%7D%20node%20to%20which%20the%20dom%20has%20been%20attached.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_attachDom'%2Cvalue%3Afunction%20_attachDom(dom)%7Bif(this.attachShadow)%7Bif(dom)%7Bif(!this.shadowRoot)%7Bthis.attachShadow(%7Bmode%3A'open'%7D)%3B%7Dthis.shadowRoot.appendChild(dom)%3Breturn%20this.shadowRoot%3B%7Dreturn%20null%3B%7Delse%7Bthrow%20new%20Error('ShadowDOM%20not%20available.%20'%2B%2F%2F%20TODO(sorvell)%3A%20move%20to%20compile-time%20conditional%20when%20supported%0A'Polymer.Element%20can%20create%20dom%20as%20children%20instead%20of%20in%20'%2B'ShadowDOM%20by%20setting%20%60this.root%20%3D%20this%3B%5C%60%20before%20%5C%60ready%5C%60.')%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20When%20using%20the%20ShadyCSS%20scoping%20and%20custom%20property%20shim%2C%20causes%20all%0A%20%20%20%20%20%20%20*%20shimmed%20styles%20in%20this%20element%20(and%20its%20subtree)%20to%20be%20updated%0A%20%20%20%20%20%20%20*%20based%20on%20current%20custom%20property%20values.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20optional%20parameter%20overrides%20inline%20custom%20property%20styles%20with%20an%0A%20%20%20%20%20%20%20*%20object%20of%20properties%20where%20the%20keys%20are%20CSS%20properties%2C%20and%20the%20values%0A%20%20%20%20%20%20%20*%20are%20strings.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%20%60this.updateStyles(%7B'--color'%3A%20'blue'%7D)%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20These%20properties%20are%20retained%20unless%20a%20value%20of%20%60null%60%20is%20set.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%3A%20This%20function%20does%20not%20support%20updating%20CSS%20mixins.%0A%20%20%20%20%20%20%20*%20You%20can%20not%20dynamically%20change%20the%20value%20of%20an%20%60%40apply%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20properties%20Bag%20of%20custom%20property%20key%2Fvalues%20to%0A%20%20%20%20%20%20%20*%20%20%20apply%20to%20this%20element.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'updateStyles'%2Cvalue%3Afunction%20updateStyles(properties)%7Bif(window.ShadyCSS)%7Bwindow.ShadyCSS.styleSubtree(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%2Cproperties)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Rewrites%20a%20given%20URL%20relative%20to%20a%20base%20URL.%20The%20base%20URL%20defaults%20to%0A%20%20%20%20%20%20%20*%20the%20original%20location%20of%20the%20document%20containing%20the%20%60dom-module%60%20for%0A%20%20%20%20%20%20%20*%20this%20element.%20This%20method%20will%20return%20the%20same%20URL%20before%20and%20after%0A%20%20%20%20%20%20%20*%20bundling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20this%20function%20performs%20no%20resolution%20for%20URLs%20that%20start%0A%20%20%20%20%20%20%20*%20with%20%60%2F%60%20(absolute%20URLs)%20or%20%60%23%60%20(hash%20identifiers).%20%20For%20general%20purpose%0A%20%20%20%20%20%20%20*%20URL%20resolution%2C%20use%20%60window.URL%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20url%20URL%20to%20resolve.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20base%20Optional%20base%20URL%20to%20resolve%20against%2C%20defaults%0A%20%20%20%20%20%20%20*%20to%20the%20element's%20%60importPath%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Rewritten%20URL%20relative%20to%20base%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'resolveUrl'%2Cvalue%3Afunction%20resolveUrl(url%2Cbase)%7Bif(!base%26%26this.importPath)%7Bbase%3DPolymer.ResolveUrl.resolveUrl(this.importPath)%3B%7Dreturn%20Polymer.ResolveUrl.resolveUrl(url%2Cbase)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20to%20add%20map%20of%20dynamic%20functions%20on%0A%20%20%20%20%20%20%20*%20template%20info%2C%20for%20consumption%20by%20%60PropertyEffects%60%20template%20binding%0A%20%20%20%20%20%20%20*%20code.%20This%20map%20determines%20which%20method%20templates%20should%20have%20accessors%0A%20%20%20%20%20%20%20*%20created%20for%20them.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%5D%2C%5B%7Bkey%3A'_processStyleText'%2Cvalue%3Afunction%20_processStyleText(cssText%2CbaseURI)%7Breturn%20Polymer.ResolveUrl.resolveCss(cssText%2CbaseURI)%3B%7D%2F**%0A%20%20%20%20%20%20*%20Configures%20an%20element%20%60proto%60%20to%20function%20with%20a%20given%20%60template%60.%0A%20%20%20%20%20%20*%20The%20element%20name%20%60is%60%20and%20extends%20%60ext%60%20must%20be%20specified%20for%20ShadyCSS%0A%20%20%20%20%20%20*%20style%20scoping.%0A%20%20%20%20%20%20*%0A%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20is%20Tag%20name%20(or%20type%20extension%20name)%20for%20this%20element%0A%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_finalizeTemplate'%2Cvalue%3Afunction%20_finalizeTemplate(is)%7B%2F**%20%40const%20%7BHTMLTemplateElement%7D%20*%2Fvar%20template%3Dthis.prototype._template%3Bif(template%26%26!template.__polymerFinalized)%7Btemplate.__polymerFinalized%3Dtrue%3Bvar%20importPath%3Dthis.importPath%3Bvar%20baseURI%3DimportPath%3FPolymer.ResolveUrl.resolveUrl(importPath)%3A''%3B%2F%2F%20e.g.%20support%20%60include%3D%22module-name%22%60%2C%20and%20ShadyCSS%0AprocessElementStyles(this%2Ctemplate%2Cis%2CbaseURI)%3Bthis.prototype._bindTemplate(template)%3B%7D%7D%7D%2C%7Bkey%3A'_parseTemplateContent'%2Cvalue%3Afunction%20_parseTemplateContent(template%2CtemplateInfo%2CnodeInfo)%7BtemplateInfo.dynamicFns%3DtemplateInfo.dynamicFns%7C%7Cthis._properties%3Breturn%20_get(PolymerElement.__proto__%7C%7CObject.getPrototypeOf(PolymerElement)%2C'_parseTemplateContent'%2Cthis).call(this%2Ctemplate%2CtemplateInfo%2CnodeInfo)%3B%7D%7D%5D)%3Breturn%20PolymerElement%3B%7D(polymerElementBase)%3Breturn%20PolymerElement%3B%7D)%3B%2F**%0A%20%20%20*%20When%20using%20the%20ShadyCSS%20scoping%20and%20custom%20property%20shim%2C%20causes%20all%0A%20%20%20*%20shimmed%20%60styles%60%20(via%20%60custom-style%60)%20in%20the%20document%20(and%20its%20subtree)%0A%20%20%20*%20to%20be%20updated%20based%20on%20current%20custom%20property%20values.%0A%20%20%20*%0A%20%20%20*%20The%20optional%20parameter%20overrides%20inline%20custom%20property%20styles%20with%20an%0A%20%20%20*%20object%20of%20properties%20where%20the%20keys%20are%20CSS%20properties%2C%20and%20the%20values%0A%20%20%20*%20are%20strings.%0A%20%20%20*%0A%20%20%20*%20Example%3A%20%60Polymer.updateStyles(%7B'--color'%3A%20'blue'%7D)%60%0A%20%20%20*%0A%20%20%20*%20These%20properties%20are%20retained%20unless%20a%20value%20of%20%60null%60%20is%20set.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20props%20Bag%20of%20custom%20property%20key%2Fvalues%20to%0A%20%20%20*%20%20%20apply%20to%20the%20document.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.updateStyles%3Dfunction(props)%7Bif(window.ShadyCSS)%7Bwindow.ShadyCSS.styleDocument(props)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Felement-mixin.html.js%0A",
            "totalBytes": 30666,
            "wastedBytes": 21056,
            "wastedPercent": 68.66236222526577
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7Dfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F%2F%20Base%20class%20for%20HTMLTemplateElement%20extension%20that%20has%20property%20effects%0A%2F%2F%20machinery%20for%20propagating%20host%20properties%20to%20children.%20This%20is%20an%20ES5%0A%2F%2F%20class%20only%20because%20Babel%20(incorrectly)%20requires%20super()%20in%20the%20class%0A%2F%2F%20constructor%20even%20though%20no%20%60this%60%20is%20used%20and%20it%20returns%20an%20instance.%0Avar%20newInstance%3Dnull%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BHTMLTemplateElement%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20HTMLTemplateElementExtension()%7Breturn%20newInstance%3B%7DHTMLTemplateElementExtension.prototype%3DObject.create(HTMLTemplateElement.prototype%2C%7Bconstructor%3A%7Bvalue%3AHTMLTemplateElementExtension%2Cwritable%3Atrue%7D%7D)%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BHTMLTemplateElementExtension%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20DataTemplate%3DPolymer.PropertyEffects(HTMLTemplateElementExtension)%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%20%40extends%20%7BDataTemplate%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20MutableDataTemplate%3DPolymer.MutableData(DataTemplate)%3B%2F%2F%20Applies%20a%20DataTemplate%20subclass%20to%20a%20%3Ctemplate%3E%20instance%0Afunction%20upgradeTemplate(template%2Cconstructor)%7BnewInstance%3Dtemplate%3BObject.setPrototypeOf(template%2Cconstructor.prototype)%3Bnew%20constructor()%3BnewInstance%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Base%20class%20for%20TemplateInstance.%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertyEffects(function()%7Bfunction%20_class()%7B_classCallCheck(this%2C_class)%3B%7Dreturn%20_class%3B%7D())%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40customElement%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyEffects%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20TemplateInstanceBase%3Dfunction(_base)%7B_inherits(TemplateInstanceBase%2C_base)%3Bfunction%20TemplateInstanceBase(props)%7B_classCallCheck(this%2CTemplateInstanceBase)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(TemplateInstanceBase.__proto__%7C%7CObject.getPrototypeOf(TemplateInstanceBase)).call(this))%3B_this._configureProperties(props)%3B_this.root%3D_this._stampTemplate(_this.__dataHost)%3B%2F%2F%20Save%20list%20of%20stamped%20children%0Avar%20children%3D_this.children%3D%5B%5D%3Bfor(var%20n%3D_this.root.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bchildren.push(n)%3Bn.__templatizeInstance%3D_this%3B%7Dif(_this.__templatizeOwner%26%26_this.__templatizeOwner.__hideTemplateChildren__)%7B_this._showHideChildren(true)%3B%7D%2F%2F%20Flush%20props%20only%20when%20props%20are%20passed%20if%20instance%20props%20exist%0A%2F%2F%20or%20when%20there%20isn't%20instance%20props.%0Avar%20options%3D_this.__templatizeOptions%3Bif(props%26%26options.instanceProps%7C%7C!options.instanceProps)%7B_this._enableProperties()%3B%7Dreturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Configure%20the%20given%20%60props%60%20by%20calling%20%60_setPendingProperty%60.%20Also%0A%20%20%20%20%20%20%20*%20sets%20any%20properties%20stored%20in%20%60__hostProps%60.%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Object%20of%20property%20name-value%20pairs%20to%20set.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F_createClass(TemplateInstanceBase%2C%5B%7Bkey%3A'_configureProperties'%2Cvalue%3Afunction%20_configureProperties(props)%7Bvar%20options%3Dthis.__templatizeOptions%3Bif(options.forwardHostProp)%7Bfor(var%20hprop%20in%20this.__hostProps)%7Bthis._setPendingProperty(hprop%2Cthis.__dataHost%5B'_host_'%2Bhprop%5D)%3B%7D%7D%2F%2F%20Any%20instance%20props%20passed%20in%20the%20constructor%20will%20overwrite%20host%20props%3B%0A%2F%2F%20normally%20this%20would%20be%20a%20user%20error%20but%20we%20don't%20specifically%20filter%20them%0Afor(var%20iprop%20in%20props)%7Bthis._setPendingProperty(iprop%2Cprops%5Biprop%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Forwards%20a%20host%20property%20to%20this%20instance.%20%20This%20method%20should%20be%0A%20%20%20%20%20%20%20*%20called%20on%20instances%20from%20the%20%60options.forwardHostProp%60%20callback%0A%20%20%20%20%20%20%20*%20to%20propagate%20changes%20of%20host%20properties%20to%20each%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20this%20method%20enqueues%20the%20change%2C%20which%20are%20flushed%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20or%20path%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20the%20property%20to%20forward%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'forwardHostProp'%2Cvalue%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bif(this._setPendingPropertyOrPath(prop%2Cvalue%2Cfalse%2Ctrue))%7Bthis.__dataHost._enqueueClient(this)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addEventListenerToNode'%2Cvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bvar%20_this2%3Dthis%3Bif(this._methodHost%26%26this.__templatizeOptions.parentModel)%7B%2F%2F%20If%20this%20instance%20should%20be%20considered%20a%20parent%20model%2C%20decorate%0A%2F%2F%20events%20this%20template%20instance%20as%20%60model%60%0Athis._methodHost._addEventListenerToNode(node%2CeventName%2Cfunction(e)%7Be.model%3D_this2%3Bhandler(e)%3B%7D)%3B%7Delse%7B%2F%2F%20Otherwise%20delegate%20to%20the%20template's%20host%20(which%20could%20be)%0A%2F%2F%20another%20template%20instance%0Avar%20templateHost%3Dthis.__dataHost.__dataHost%3Bif(templateHost)%7BtemplateHost._addEventListenerToNode(node%2CeventName%2Chandler)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hide%20Set%20to%20true%20to%20hide%20the%20children%3B%0A%20%20%20%20%20%20%20*%20set%20to%20false%20to%20show%20them.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren(hide)%7Bvar%20c%3Dthis.children%3Bfor(var%20i%3D0%3Bi%3Cc.length%3Bi%2B%2B)%7Bvar%20n%3Dc%5Bi%5D%3B%2F%2F%20Ignore%20non-changes%0Aif(Boolean(hide)!%3DBoolean(n.__hideTemplateChildren__))%7Bif(n.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bif(hide)%7Bn.__polymerTextContent__%3Dn.textContent%3Bn.textContent%3D''%3B%7Delse%7Bn.textContent%3Dn.__polymerTextContent__%3B%7D%2F%2F%20remove%20and%20replace%20slot%0A%7Delse%20if(n.localName%3D%3D%3D'slot')%7Bif(hide)%7Bn.__polymerReplaced__%3Ddocument.createComment('hidden-slot')%3Bn.parentNode.replaceChild(n.__polymerReplaced__%2Cn)%3B%7Delse%7Bvar%20replace%3Dn.__polymerReplaced__%3Bif(replace)%7Breplace.parentNode.replaceChild(n%2Creplace)%3B%7D%7D%7Delse%20if(n.style)%7Bif(hide)%7Bn.__polymerDisplay__%3Dn.style.display%3Bn.style.display%3D'none'%3B%7Delse%7Bn.style.display%3Dn.__polymerDisplay__%3B%7D%7D%7Dn.__hideTemplateChildren__%3Dhide%3Bif(n._showHideChildren)%7Bn._showHideChildren(hide)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20property-effects%20implementation%20to%20intercept%0A%20%20%20%20%20%20%20*%20textContent%20bindings%20while%20children%20are%20%22hidden%22%20and%20cache%20in%0A%20%20%20%20%20%20%20*%20private%20storage%20for%20later%20retrieval.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7Bif(node.__hideTemplateChildren__%26%26node.nodeType%3D%3DNode.TEXT_NODE%26%26prop%3D%3D'textContent')%7Bnode.__polymerTextContent__%3Dvalue%3B%7Delse%7B_get(TemplateInstanceBase.prototype.__proto__%7C%7CObject.getPrototypeOf(TemplateInstanceBase.prototype)%2C'_setUnmanagedPropertyToNode'%2Cthis).call(this%2Cnode%2Cprop%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Find%20the%20parent%20model%20of%20this%20template%20instance.%20%20The%20parent%20model%0A%20%20%20%20%20%20%20*%20is%20either%20another%20templatize%20instance%20that%20had%20option%20%60parentModel%3A%20true%60%2C%0A%20%20%20%20%20%20%20*%20or%20else%20the%20host%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7B!Polymer_PropertyEffects%7D%20The%20parent%20model%20of%20this%20instance%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'dispatchEvent'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stub%20of%20HTMLElement's%20%60dispatchEvent%60%2C%20so%20that%20effects%20that%20may%0A%20%20%20%20%20%20%20*%20dispatch%20events%20safely%20no-op.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BEvent%7D%20event%20Event%20to%20dispatch%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Always%20true.%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20dispatchEvent(event)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Areturn%20true%3B%7D%7D%2C%7Bkey%3A'parentModel'%2Cget%3Afunction%20get()%7Bvar%20model%3Dthis.__parentModel%3Bif(!model)%7Bvar%20options%3Dvoid%200%3Bmodel%3Dthis%3Bdo%7B%2F%2F%20A%20template%20instance's%20%60__dataHost%60%20is%20a%20%3Ctemplate%3E%0A%2F%2F%20%60model.__dataHost.__dataHost%60%20is%20the%20template's%20host%0Amodel%3Dmodel.__dataHost.__dataHost%3B%7Dwhile((options%3Dmodel.__templatizeOptions)%26%26!options.parentModel)%3Bthis.__parentModel%3Dmodel%3B%7Dreturn%20model%3B%7D%7D%5D)%3Breturn%20TemplateInstanceBase%3B%7D(base)%3B%2F**%20%40type%20%7B!DataTemplate%7D%20*%2FTemplateInstanceBase.prototype.__dataHost%3B%2F**%20%40type%20%7B!TemplatizeOptions%7D%20*%2FTemplateInstanceBase.prototype.__templatizeOptions%3B%2F**%20%40type%20%7B!Polymer_PropertyEffects%7D%20*%2FTemplateInstanceBase.prototype._methodHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2FTemplateInstanceBase.prototype.__templatizeOwner%3B%2F**%20%40type%20%7B!Object%7D%20*%2FTemplateInstanceBase.prototype.__hostProps%3B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BTemplateInstanceBase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20MutableTemplateInstanceBase%3DPolymer.MutableData(TemplateInstanceBase)%3Bfunction%20findMethodHost(template)%7B%2F%2F%20Technically%20this%20should%20be%20the%20owner%20of%20the%20outermost%20template.%0A%2F%2F%20In%20shadow%20dom%2C%20this%20is%20always%20getRootNode().host%2C%20but%20we%20can%0A%2F%2F%20approximate%20this%20via%20cooperation%20with%20our%20dataHost%20always%20setting%0A%2F%2F%20%60_methodHost%60%20as%20long%20as%20there%20were%20bindings%20(or%20id's)%20on%20this%0A%2F%2F%20instance%20causing%20it%20to%20get%20a%20dataHost.%0Avar%20templateHost%3Dtemplate.__dataHost%3Breturn%20templateHost%26%26templateHost._methodHost%7C%7CtemplateHost%3B%7D%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%0A%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20class.prototype%20is%20not%20defined%20for%20some%20reason%0A%20%20%20%20%20*%2Ffunction%20createTemplatizerClass(template%2CtemplateInfo%2Coptions)%7B%2F%2F%20Anonymous%20class%20created%20by%20the%20templatize%0Avar%20base%3Doptions.mutableData%3FMutableTemplateInstanceBase%3ATemplateInstanceBase%3B%2F%2F%20Affordance%20for%20global%20mixins%20onto%20TemplatizeInstance%0Aif(Polymer.Templatize.mixin)%7Bbase%3DPolymer.Templatize.mixin(base)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fvar%20klass%3Dfunction(_base2)%7B_inherits(klass%2C_base2)%3Bfunction%20klass()%7B_classCallCheck(this%2Cklass)%3Breturn%20_possibleConstructorReturn(this%2C(klass.__proto__%7C%7CObject.getPrototypeOf(klass)).apply(this%2Carguments))%3B%7Dreturn%20klass%3B%7D(base)%3Bklass.prototype.__templatizeOptions%3Doptions%3Bklass.prototype._bindTemplate(template)%3BaddNotifyEffects(klass%2Ctemplate%2CtemplateInfo%2Coptions)%3Breturn%20klass%3B%7D%2F**%0A%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20class.prototype%20is%20not%20defined%20for%20some%20reason%0A%20%20%20%20%20*%2Ffunction%20addPropagateEffects(template%2CtemplateInfo%2Coptions)%7Bvar%20userForwardHostProp%3Doptions.forwardHostProp%3Bif(userForwardHostProp)%7B%2F%2F%20Provide%20data%20API%20and%20property%20effects%20on%20memoized%20template%20class%0Avar%20klass%3DtemplateInfo.templatizeTemplateClass%3Bif(!klass)%7Bvar%20_base3%3Doptions.mutableData%3FMutableDataTemplate%3ADataTemplate%3B%2F**%20%40private%20*%2Fklass%3DtemplateInfo.templatizeTemplateClass%3Dfunction(_base4)%7B_inherits(TemplatizedTemplate%2C_base4)%3Bfunction%20TemplatizedTemplate()%7B_classCallCheck(this%2CTemplatizedTemplate)%3Breturn%20_possibleConstructorReturn(this%2C(TemplatizedTemplate.__proto__%7C%7CObject.getPrototypeOf(TemplatizedTemplate)).apply(this%2Carguments))%3B%7Dreturn%20TemplatizedTemplate%3B%7D(_base3)%3B%2F%2F%20Add%20template%20-%20%3Einstances%20effects%0A%2F%2F%20and%20host%20%3C-%20template%20effects%0Avar%20hostProps%3DtemplateInfo.hostProps%3Bfor(var%20prop%20in%20hostProps)%7Bklass.prototype._addPropertyEffect('_host_'%2Bprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.PROPAGATE%2C%7Bfn%3AcreateForwardHostPropEffect(prop%2CuserForwardHostProp)%7D)%3Bklass.prototype._createNotifyingProperty('_host_'%2Bprop)%3B%7D%7DupgradeTemplate(template%2Cklass)%3B%2F%2F%20Mix%20any%20pre-bound%20data%20into%20__data%3B%20no%20need%20to%20flush%20this%20to%0A%2F%2F%20instances%20since%20they%20pull%20from%20the%20template%20at%20instance-time%0Aif(template.__dataProto)%7B%2F%2F%20Note%2C%20generally%20%60__dataProto%60%20could%20be%20chained%2C%20but%20it's%20guaranteed%0A%2F%2F%20to%20not%20be%20since%20this%20is%20a%20vanilla%20template%20we%20just%20added%20effects%20to%0AObject.assign(template.__data%2Ctemplate.__dataProto)%3B%7D%2F%2F%20Clear%20any%20pending%20data%20for%20performance%0Atemplate.__dataTemp%3D%7B%7D%3Btemplate.__dataPending%3Dnull%3Btemplate.__dataOld%3Dnull%3Btemplate._enableProperties()%3B%7D%7D%2F*%20eslint-enable%20valid-jsdoc%20*%2Ffunction%20createForwardHostPropEffect(hostProp%2CuserForwardHostProp)%7Breturn%20function%20forwardHostProp(template%2Cprop%2Cprops)%7BuserForwardHostProp.call(template.__templatizeOwner%2Cprop.substring('_host_'.length)%2Cprops%5Bprop%5D)%3B%7D%3B%7Dfunction%20addNotifyEffects(klass%2Ctemplate%2CtemplateInfo%2Coptions)%7Bvar%20hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3Bfor(var%20iprop%20in%20options.instanceProps)%7Bdelete%20hostProps%5Biprop%5D%3Bvar%20userNotifyInstanceProp%3Doptions.notifyInstanceProp%3Bif(userNotifyInstanceProp)%7Bklass.prototype._addPropertyEffect(iprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY%2C%7Bfn%3AcreateNotifyInstancePropEffect(iprop%2CuserNotifyInstanceProp)%7D)%3B%7D%7Dif(options.forwardHostProp%26%26template.__dataHost)%7Bfor(var%20hprop%20in%20hostProps)%7Bklass.prototype._addPropertyEffect(hprop%2Cklass.prototype.PROPERTY_EFFECT_TYPES.NOTIFY%2C%7Bfn%3AcreateNotifyHostPropEffect()%7D)%3B%7D%7D%7Dfunction%20createNotifyInstancePropEffect(instProp%2CuserNotifyInstanceProp)%7Breturn%20function%20notifyInstanceProp(inst%2Cprop%2Cprops)%7BuserNotifyInstanceProp.call(inst.__templatizeOwner%2Cinst%2Cprop%2Cprops%5Bprop%5D)%3B%7D%3B%7Dfunction%20createNotifyHostPropEffect()%7Breturn%20function%20notifyHostProp(inst%2Cprop%2Cprops)%7Binst.__dataHost._setPendingPropertyOrPath('_host_'%2Bprop%2Cprops%5Bprop%5D%2Ctrue%2Ctrue)%3B%7D%3B%7D%2F**%0A%20%20%20%20%20*%20Module%20for%20preparing%20and%20stamping%20instances%20of%20templates%20that%20utilize%0A%20%20%20%20%20*%20Polymer's%20data-binding%20and%20declarative%20event%20listener%20features.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Get%20a%20template%20from%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20let%20template%20%3D%20this.querySelector('template')%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Prepare%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20let%20TemplateClass%20%3D%20Polymer.Templatize.templatize(template)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Instance%20the%20template%20with%20an%20initial%20data%20model%0A%20%20%20%20%20*%20%20%20%20%20let%20instance%20%3D%20new%20TemplateClass(%7BmyProp%3A%20'initial'%7D)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Insert%20the%20instance's%20DOM%20somewhere%2C%20e.g.%20element's%20shadow%20DOM%0A%20%20%20%20%20*%20%20%20%20%20this.shadowRoot.appendChild(instance.root)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Changing%20a%20property%20on%20the%20instance%20will%20propagate%20to%20bindings%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20in%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20instance.myProp%20%3D%20'new%20value'%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20%60options%60%20dictionary%20passed%20to%20%60templatize%60%20allows%20for%20customizing%0A%20%20%20%20%20*%20features%20of%20the%20generated%20template%20class%2C%20including%20how%20outer-scope%20host%0A%20%20%20%20%20*%20properties%20should%20be%20forwarded%20into%20template%20instances%2C%20how%20any%20instance%0A%20%20%20%20%20*%20properties%20added%20into%20the%20template's%20scope%20should%20be%20notified%20out%20to%0A%20%20%20%20%20*%20the%20host%2C%20and%20whether%20the%20instance%20should%20be%20decorated%20as%20a%20%22parent%20model%22%0A%20%20%20%20%20*%20of%20any%20event%20handlers.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Customize%20property%20forwarding%20and%20event%20model%20decoration%0A%20%20%20%20%20*%20%20%20%20%20let%20TemplateClass%20%3D%20Polymer.Templatize.templatize(template%2C%20this%2C%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20parentModel%3A%20true%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20forwardHostProp(property%2C%20value)%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20instanceProps%3A%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20notifyInstanceProp(instance%2C%20property%2C%20value)%20%7B...%7D%2C%0A%20%20%20%20%20*%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Module%20for%20preparing%20and%20stamping%20instances%20of%20templates%0A%20%20%20%20%20*%20%20%20utilizing%20Polymer%20templating%20features.%0A%20%20%20%20%20*%2FPolymer.Templatize%3D%7B%2F**%0A%20%20%20%20%20%20%20*%20Returns%20an%20anonymous%20%60Polymer.PropertyEffects%60%20class%20bound%20to%20the%0A%20%20%20%20%20%20%20*%20%60%3Ctemplate%3E%60%20provided.%20%20Instancing%20the%20class%20will%20result%20in%20the%0A%20%20%20%20%20%20%20*%20template%20being%20stamped%20into%20a%20document%20fragment%20stored%20as%20the%20instance's%0A%20%20%20%20%20%20%20*%20%60root%60%20property%2C%20after%20which%20it%20can%20be%20appended%20to%20the%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Templates%20may%20utilize%20all%20Polymer%20data-binding%20features%20as%20well%20as%0A%20%20%20%20%20%20%20*%20declarative%20event%20listeners.%20%20Event%20listeners%20and%20inline%20computing%0A%20%20%20%20%20%20%20*%20functions%20in%20the%20template%20will%20be%20called%20on%20the%20host%20of%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20constructor%20returned%20takes%20a%20single%20argument%20dictionary%20of%20initial%0A%20%20%20%20%20%20%20*%20property%20values%20to%20propagate%20into%20template%20bindings.%20%20Additionally%0A%20%20%20%20%20%20%20*%20host%20properties%20can%20be%20forwarded%20in%2C%20and%20instance%20properties%20can%20be%0A%20%20%20%20%20%20%20*%20notified%20out%20by%20providing%20optional%20callbacks%20in%20the%20%60options%60%20dictionary.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Valid%20configuration%20in%20%60options%60%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60forwardHostProp(property%2C%20value)%60%3A%20Called%20when%20a%20property%20referenced%0A%20%20%20%20%20%20%20*%20%20%20in%20the%20template%20changed%20on%20the%20template's%20host.%20As%20this%20library%20does%0A%20%20%20%20%20%20%20*%20%20%20not%20retain%20references%20to%20templates%20instanced%20by%20the%20user%2C%20it%20is%20the%0A%20%20%20%20%20%20%20*%20%20%20templatize%20owner's%20responsibility%20to%20forward%20host%20property%20changes%20into%0A%20%20%20%20%20%20%20*%20%20%20user-stamped%20instances.%20%20The%20%60instance.forwardHostProp(property%2C%20value)%60%0A%20%20%20%20%20%20%20*%20%20%20%20method%20on%20the%20generated%20class%20should%20be%20called%20to%20forward%20host%0A%20%20%20%20%20%20%20*%20%20%20properties%20into%20the%20template%20to%20prevent%20unnecessary%20property-changed%0A%20%20%20%20%20%20%20*%20%20%20notifications.%20Any%20properties%20referenced%20in%20the%20template%20that%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20defined%20in%20%60instanceProps%60%20will%20be%20notified%20up%20to%20the%20template's%20host%0A%20%20%20%20%20%20%20*%20%20%20automatically.%0A%20%20%20%20%20%20%20*%20-%20%60instanceProps%60%3A%20Dictionary%20of%20property%20names%20that%20will%20be%20added%0A%20%20%20%20%20%20%20*%20%20%20to%20the%20instance%20by%20the%20templatize%20owner.%20%20These%20properties%20shadow%20any%0A%20%20%20%20%20%20%20*%20%20%20host%20properties%2C%20and%20changes%20within%20the%20template%20to%20these%20properties%0A%20%20%20%20%20%20%20*%20%20%20will%20result%20in%20%60notifyInstanceProp%60%20being%20called.%0A%20%20%20%20%20%20%20*%20-%20%60mutableData%60%3A%20When%20%60true%60%2C%20the%20generated%20class%20will%20skip%20strict%0A%20%20%20%20%20%20%20*%20%20%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20%20%20%20%20*%20%20%20%22dirty%22).%0A%20%20%20%20%20%20%20*%20-%20%60notifyInstanceProp(instance%2C%20property%2C%20value)%60%3A%20Called%20when%0A%20%20%20%20%20%20%20*%20%20%20an%20instance%20property%20changes.%20%20Users%20may%20choose%20to%20call%20%60notifyPath%60%0A%20%20%20%20%20%20%20*%20%20%20on%20e.g.%20the%20owner%20to%20notify%20the%20change.%0A%20%20%20%20%20%20%20*%20-%20%60parentModel%60%3A%20When%20%60true%60%2C%20events%20handled%20by%20declarative%20event%20listeners%0A%20%20%20%20%20%20%20*%20%20%20(%60on-event%3D%22handler%22%60)%20will%20be%20decorated%20with%20a%20%60model%60%20property%20pointing%0A%20%20%20%20%20%20%20*%20%20%20to%20the%20template%20instance%20that%20stamped%20it.%20%20It%20will%20also%20be%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60instance.parentModel%60%20in%20cases%20where%20template%20instance%20nesting%0A%20%20%20%20%20%20%20*%20%20%20causes%20an%20inner%20model%20to%20shadow%20an%20outer%20model.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20All%20callbacks%20are%20called%20bound%20to%20the%20%60owner%60.%20Any%20context%0A%20%20%20%20%20%20%20*%20needed%20for%20the%20callbacks%20(such%20as%20references%20to%20%60instances%60%20stamped)%0A%20%20%20%20%20%20%20*%20should%20be%20stored%20on%20the%20%60owner%60%20such%20that%20they%20can%20be%20retrieved%20via%0A%20%20%20%20%20%20%20*%20%60this%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20%60options.forwardHostProp%60%20is%20declared%20as%20an%20option%2C%20any%20properties%0A%20%20%20%20%20%20%20*%20referenced%20in%20the%20template%20will%20be%20automatically%20forwarded%20from%20the%20host%20of%0A%20%20%20%20%20%20%20*%20the%20%60%3Ctemplate%3E%60%20to%20instances%2C%20with%20the%20exception%20of%20any%20properties%20listed%20in%0A%20%20%20%20%20%20%20*%20the%20%60options.instanceProps%60%20object.%20%20%60instanceProps%60%20are%20assumed%20to%20be%0A%20%20%20%20%20%20%20*%20managed%20by%20the%20owner%20of%20the%20instances%2C%20either%20passed%20into%20the%20constructor%0A%20%20%20%20%20%20%20*%20or%20set%20after%20the%20fact.%20%20Note%2C%20any%20properties%20passed%20into%20the%20constructor%20will%0A%20%20%20%20%20%20%20*%20always%20be%20set%20to%20the%20instance%20(regardless%20of%20whether%20they%20would%20normally%0A%20%20%20%20%20%20%20*%20be%20forwarded%20from%20the%20host).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20%60templatize()%60%20can%20be%20run%20only%20once%20for%20a%20given%20%60%3Ctemplate%3E%60.%0A%20%20%20%20%20%20%20*%20Further%20calls%20will%20result%20in%20an%20error.%20Also%2C%20there%20is%20a%20special%0A%20%20%20%20%20%20%20*%20behavior%20if%20the%20template%20was%20duplicated%20through%20a%20mechanism%20such%20as%0A%20%20%20%20%20%20%20*%20%60%3Cdom-repeat%3E%60%20or%20%60%3Ctest-fixture%3E%60.%20In%20this%20case%2C%20all%20calls%20to%0A%20%20%20%20%20%20%20*%20%60templatize()%60%20return%20the%20same%20class%20for%20all%20duplicates%20of%20a%20template.%0A%20%20%20%20%20%20%20*%20The%20class%20returned%20from%20%60templatize()%60%20is%20generated%20only%20once%20using%0A%20%20%20%20%20%20%20*%20the%20%60options%60%20from%20the%20first%20call.%20This%20means%20that%20any%20%60options%60%0A%20%20%20%20%20%20%20*%20provided%20to%20subsequent%20calls%20will%20be%20ignored.%20Therefore%2C%20it%20is%20very%0A%20%20%20%20%20%20%20*%20important%20not%20to%20close%20over%20any%20variables%20inside%20the%20callbacks.%20Also%2C%0A%20%20%20%20%20%20%20*%20arrow%20functions%20must%20be%20avoided%20because%20they%20bind%20the%20outer%20%60this%60.%0A%20%20%20%20%20%20%20*%20Inside%20the%20callbacks%2C%20any%20contextual%20information%20can%20be%20accessed%0A%20%20%20%20%20%20%20*%20through%20%60this%60%2C%20which%20points%20to%20the%20%60owner%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7BPolymer_PropertyEffects%3D%7D%20owner%20Owner%20of%20the%20template%20instances%3B%0A%20%20%20%20%20%20%20*%20%20%20any%20optional%20callbacks%20will%20be%20bound%20to%20this%20owner.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20options%20Options%20dictionary%20(see%20summary%20for%20details)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bfunction(new%3ATemplateInstanceBase)%7D%20Generated%20class%20bound%20to%20the%20template%0A%20%20%20%20%20%20%20*%20%20%20provided%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20%20%20%20%20*%2Ftemplatize%3Afunction%20templatize(template%2Cowner%2Coptions)%7B%2F%2F%20Under%20strictTemplatePolicy%2C%20the%20templatized%20element%20must%20be%20owned%0A%2F%2F%20by%20a%20(trusted)%20Polymer%20element%2C%20indicated%20by%20existence%20of%20_methodHost%3B%0A%2F%2F%20e.g.%20for%20dom-if%20%26%20dom-repeat%20in%20main%20document%2C%20_methodHost%20is%20null%0Aif(Polymer.strictTemplatePolicy%26%26!findMethodHost(template))%7Bthrow%20new%20Error('strictTemplatePolicy%3A%20template%20owner%20not%20trusted')%3B%7Doptions%3D%2F**%20%40type%20%7B!TemplatizeOptions%7D%20*%2Foptions%7C%7C%7B%7D%3Bif(template.__templatizeOwner)%7Bthrow%20new%20Error('A%20%3Ctemplate%3E%20can%20only%20be%20templatized%20once')%3B%7Dtemplate.__templatizeOwner%3Downer%3Bvar%20ctor%3Downer%3Fowner.constructor%3ATemplateInstanceBase%3Bvar%20templateInfo%3Dctor._parseTemplate(template)%3B%2F%2F%20Get%20memoized%20base%20class%20for%20the%20prototypical%20template%2C%20which%0A%2F%2F%20includes%20property%20effects%20for%20binding%20template%20%26%20forwarding%0Avar%20baseClass%3DtemplateInfo.templatizeInstanceClass%3Bif(!baseClass)%7BbaseClass%3DcreateTemplatizerClass(template%2CtemplateInfo%2Coptions)%3BtemplateInfo.templatizeInstanceClass%3DbaseClass%3B%7D%2F%2F%20Host%20property%20forwarding%20must%20be%20installed%20onto%20template%20instance%0AaddPropagateEffects(template%2CtemplateInfo%2Coptions)%3B%2F%2F%20Subclass%20base%20class%20and%20add%20reference%20for%20this%20specific%20template%0A%2F**%20%40private%20*%2Fvar%20klass%3Dfunction(_baseClass)%7B_inherits(TemplateInstance%2C_baseClass)%3Bfunction%20TemplateInstance()%7B_classCallCheck(this%2CTemplateInstance)%3Breturn%20_possibleConstructorReturn(this%2C(TemplateInstance.__proto__%7C%7CObject.getPrototypeOf(TemplateInstance)).apply(this%2Carguments))%3B%7Dreturn%20TemplateInstance%3B%7D(baseClass)%3Bklass.prototype._methodHost%3DfindMethodHost(template)%3Bklass.prototype.__dataHost%3Dtemplate%3Bklass.prototype.__templatizeOwner%3Downer%3Bklass.prototype.__hostProps%3DtemplateInfo.hostProps%3Bklass%3D%2F**%20%40type%20%7Bfunction(new%3ATemplateInstanceBase)%7D%20*%2Fklass%3B%2F%2Feslint-disable-line%20no-self-assign%0Areturn%20klass%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20associated%20with%20a%20given%20element%2C%20which%0A%20%20%20%20%20%20%20*%20serves%20as%20the%20binding%20scope%20for%20the%20template%20instance%20the%20element%20is%0A%20%20%20%20%20%20%20*%20contained%20in.%20A%20template%20model%20is%20an%20instance%20of%0A%20%20%20%20%20%20%20*%20%60TemplateInstanceBase%60%2C%20and%20should%20be%20used%20to%20manipulate%20data%0A%20%20%20%20%20%20%20*%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20let%20model%20%3D%20modelForElement(el)%3B%0A%20%20%20%20%20%20%20*%20%20%20if%20(model.index%20%3C%2010)%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20model.set('item.checked'%2C%20true)%3B%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Templatize%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20The%20model%20will%20be%20returned%20for%0A%20%20%20%20%20%20%20*%20%20%20elements%20stamped%20from%20this%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%3D%7D%20node%20Node%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Template%20instance%20representing%20the%0A%20%20%20%20%20%20%20*%20%20%20binding%20scope%20for%20the%20element%0A%20%20%20%20%20%20%20*%2FmodelForElement%3Afunction%20modelForElement(template%2Cnode)%7Bvar%20model%3Dvoid%200%3Bwhile(node)%7B%2F%2F%20An%20element%20with%20a%20__templatizeInstance%20marks%20the%20top%20boundary%0A%2F%2F%20of%20a%20scope%3B%20walk%20up%20until%20we%20find%20one%2C%20and%20then%20ensure%20that%0A%2F%2F%20its%20__dataHost%20matches%20%60this%60%2C%20meaning%20this%20dom-repeat%20stamped%20it%0Aif(model%3Dnode.__templatizeInstance)%7B%2F%2F%20Found%20an%20element%20stamped%20by%20another%20template%3B%20keep%20walking%20up%0A%2F%2F%20from%20its%20__dataHost%0Aif(model.__dataHost!%3Dtemplate)%7Bnode%3Dmodel.__dataHost%3B%7Delse%7Breturn%20model%3B%7D%7Delse%7B%2F%2F%20Still%20in%20a%20template%20scope%2C%20keep%20going%20up%20until%0A%2F%2F%20a%20__templatizeInstance%20is%20found%0Anode%3Dnode.parentNode%3B%7D%7Dreturn%20null%3B%7D%7D%3BPolymer.TemplateInstanceBase%3DTemplateInstanceBase%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Ftemplatize.html.js%0A",
            "totalBytes": 24612,
            "wastedBytes": 14344,
            "wastedPercent": 58.280513570615966
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPolymer.TemplateInstanceBase%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20*%20%40extends%20%7BPolymer.Element%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20domRepeatBase%3DPolymer.OptionalMutableData(Polymer.Element)%3B%2F**%0A%20%20%20*%20The%20%60%3Cdom-repeat%3E%60%20element%20will%20automatically%20stamp%20and%20binds%20one%20instance%0A%20%20%20*%20of%20template%20content%20to%20each%20object%20in%20a%20user-provided%20array.%0A%20%20%20*%20%60dom-repeat%60%20accepts%20an%20%60items%60%20property%2C%20and%20one%20instance%20of%20the%20template%0A%20%20%20*%20is%20stamped%20for%20each%20item%20into%20the%20DOM%20at%20the%20location%20of%20the%20%60dom-repeat%60%0A%20%20%20*%20element.%20%20The%20%60item%60%20property%20will%20be%20set%20on%20each%20instance's%20binding%0A%20%20%20*%20scope%2C%20thus%20templates%20should%20bind%20to%20sub-properties%20of%20%60item%60.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-module%20id%3D%22employee-list%22%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3Ctemplate%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Employee%20list%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20items%3D%22%7B%7Bemployees%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%0A%20%20%20*%20%3C%2Fdom-module%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20With%20the%20following%20custom%20element%20definition%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20class%20EmployeeList%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20%20static%20get%20is()%20%7B%20return%20'employee-list'%3B%20%7D%0A%20%20%20*%20%20%20static%20get%20properties()%20%7B%0A%20%20%20*%20%20%20%20%20return%20%7B%0A%20%20%20*%20%20%20%20%20%20%20employees%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20value()%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Bob'%2C%20last%3A%20'Smith'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Sally'%2C%20last%3A%20'Johnson'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20...%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%7D%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20Notifications%20for%20changes%20to%20items%20sub-properties%20will%20be%20forwarded%20to%20template%0A%20%20%20*%20instances%2C%20which%20will%20update%20via%20the%20normal%20structured%20data%20notification%20system.%0A%20%20%20*%0A%20%20%20*%20Mutations%20to%20the%20%60items%60%20array%20itself%20should%20be%20made%20using%20the%20Array%0A%20%20%20*%20mutation%20API's%20on%20%60Polymer.Base%60%20(%60push%60%2C%20%60pop%60%2C%20%60splice%60%2C%20%60shift%60%2C%0A%20%20%20*%20%60unshift%60)%2C%20and%20template%20instances%20will%20be%20kept%20in%20sync%20with%20the%20data%20in%20the%0A%20%20%20*%20array.%0A%20%20%20*%0A%20%20%20*%20Events%20caught%20by%20event%20handlers%20within%20the%20%60dom-repeat%60%20template%20will%20be%0A%20%20%20*%20decorated%20with%20a%20%60model%60%20property%2C%20which%20represents%20the%20binding%20scope%20for%0A%20%20%20*%20each%20template%20instance.%20%20The%20model%20is%20an%20instance%20of%20Polymer.Base%2C%20and%20should%0A%20%20%20*%20be%20used%20to%20manipulate%20data%20on%20the%20instance%2C%20for%20example%0A%20%20%20*%20%60event.model.set('item.checked'%2C%20true)%3B%60.%0A%20%20%20*%0A%20%20%20*%20Alternatively%2C%20the%20model%20for%20a%20template%20instance%20for%20an%20element%20stamped%20by%0A%20%20%20*%20a%20%60dom-repeat%60%20can%20be%20obtained%20using%20the%20%60modelForElement%60%20API%20on%20the%0A%20%20%20*%20%60dom-repeat%60%20that%20stamped%20it%2C%20for%20example%0A%20%20%20*%20%60this.%24.domRepeat.modelForElement(event.target).set('item.checked'%2C%20true)%3B%60.%0A%20%20%20*%20This%20may%20be%20useful%20for%20manipulating%20instance%20data%20of%20event%20targets%20obtained%0A%20%20%20*%20by%20event%20handlers%20on%20parents%20of%20the%20%60dom-repeat%60%20(event%20delegation).%0A%20%20%20*%0A%20%20%20*%20A%20view-specific%20filter%2Fsort%20may%20be%20applied%20to%20each%20%60dom-repeat%60%20by%20supplying%20a%0A%20%20%20*%20%60filter%60%20and%2For%20%60sort%60%20property.%20%20This%20may%20be%20a%20string%20that%20names%20a%20function%20on%0A%20%20%20*%20the%20host%2C%20or%20a%20function%20may%20be%20assigned%20to%20the%20property%20directly.%20%20The%20functions%0A%20%20%20*%20should%20implemented%20following%20the%20standard%20%60Array%60%20filter%2Fsort%20API.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20re-run%20the%20filter%20or%20sort%20functions%20based%20on%20changes%20to%20sub-fields%0A%20%20%20*%20of%20%60items%60%2C%20the%20%60observe%60%20property%20may%20be%20set%20as%20a%20space-separated%20list%20of%0A%20%20%20*%20%60item%60%20sub-fields%20that%20should%20cause%20a%20re-filter%2Fsort%20when%20modified.%20%20If%0A%20%20%20*%20the%20filter%20or%20sort%20function%20depends%20on%20properties%20not%20contained%20in%20%60items%60%2C%0A%20%20%20*%20the%20user%20should%20observe%20changes%20to%20those%20properties%20and%20call%20%60render%60%20to%20update%0A%20%20%20*%20the%20view%20based%20on%20the%20dependency%20change.%0A%20%20%20*%0A%20%20%20*%20For%20example%2C%20for%20an%20%60dom-repeat%60%20with%20a%20filter%20of%20the%20following%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20isEngineer(item)%20%7B%0A%20%20%20*%20%20%20return%20item.type%20%3D%3D%20'engineer'%20%7C%7C%20item.manager.type%20%3D%3D%20'engineer'%3B%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20Then%20the%20%60observe%60%20property%20should%20be%20configured%20as%20follows%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-repeat%20items%3D%22%7B%7Bemployees%7D%7D%22%20filter%3D%22isEngineer%22%20observe%3D%22type%20manager.type%22%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40extends%20%7BdomRepeatBase%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.OptionalMutableData%0A%20%20%20*%20%40summary%20Custom%20element%20for%20stamping%20instance%20of%20a%20template%20bound%20to%0A%20%20%20*%20%20%20items%20in%20an%20array.%0A%20%20%20*%2Fvar%20DomRepeat%3Dfunction(_domRepeatBase)%7B_inherits(DomRepeat%2C_domRepeatBase)%3B_createClass(DomRepeat%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'dom-repeat'%3B%7D%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7Breturn%20null%3B%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7B%2F**%0A%20%20%20%20%20%20%20*%20Fired%20whenever%20DOM%20is%20added%20or%20removed%20by%20this%20template%20(by%0A%20%20%20%20%20%20%20*%20default%2C%20rendering%20occurs%20lazily).%20%20To%20force%20immediate%20rendering%2C%20call%0A%20%20%20%20%20%20%20*%20%60render%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40event%20dom-change%0A%20%20%20%20%20%20%20*%2Freturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20An%20array%20containing%20items%20determining%20how%20many%20instances%20of%20the%20template%0A%20%20%20%20%20%20%20%20%20*%20to%20stamp%20and%20that%20that%20each%20template%20instance%20should%20bind%20to.%0A%20%20%20%20%20%20%20%20%20*%2Fitems%3A%7Btype%3AArray%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20for%20the%20array%0A%20%20%20%20%20%20%20%20%20*%20element%20associated%20with%20a%20given%20template%20instance.%0A%20%20%20%20%20%20%20%20%20*%2Fas%3A%7Btype%3AString%2Cvalue%3A'item'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20with%20the%20index%0A%20%20%20%20%20%20%20%20%20*%20of%20the%20instance%20in%20the%20sorted%20and%20filtered%20list%20of%20rendered%20items.%0A%20%20%20%20%20%20%20%20%20*%20Note%2C%20for%20the%20index%20in%20the%20%60this.items%60%20array%2C%20use%20the%20value%20of%20the%0A%20%20%20%20%20%20%20%20%20*%20%60itemsIndexAs%60%20property.%0A%20%20%20%20%20%20%20%20%20*%2FindexAs%3A%7Btype%3AString%2Cvalue%3A'index'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20The%20name%20of%20the%20variable%20to%20add%20to%20the%20binding%20scope%20with%20the%20index%0A%20%20%20%20%20%20%20%20%20*%20of%20the%20instance%20in%20the%20%60this.items%60%20array.%20Note%2C%20for%20the%20index%20of%0A%20%20%20%20%20%20%20%20%20*%20this%20instance%20in%20the%20sorted%20and%20filtered%20list%20of%20rendered%20items%2C%0A%20%20%20%20%20%20%20%20%20*%20use%20the%20value%20of%20the%20%60indexAs%60%20property.%0A%20%20%20%20%20%20%20%20%20*%2FitemsIndexAs%3A%7Btype%3AString%2Cvalue%3A'itemsIndex'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20function%20that%20should%20determine%20the%20sort%20order%20of%20the%20items.%20%20This%0A%20%20%20%20%20%20%20%20%20*%20property%20should%20either%20be%20provided%20as%20a%20string%2C%20indicating%20a%20method%0A%20%20%20%20%20%20%20%20%20*%20name%20on%20the%20element's%20host%2C%20or%20else%20be%20an%20actual%20function.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20function%20should%20match%20the%20sort%20function%20passed%20to%20%60Array.sort%60.%0A%20%20%20%20%20%20%20%20%20*%20Using%20a%20sort%20function%20has%20no%20effect%20on%20the%20underlying%20%60items%60%20array.%0A%20%20%20%20%20%20%20%20%20*%2Fsort%3A%7Btype%3AFunction%2Cobserver%3A'__sortChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20function%20that%20can%20be%20used%20to%20filter%20items%20out%20of%20the%20view.%20%20This%0A%20%20%20%20%20%20%20%20%20*%20property%20should%20either%20be%20provided%20as%20a%20string%2C%20indicating%20a%20method%0A%20%20%20%20%20%20%20%20%20*%20name%20on%20the%20element's%20host%2C%20or%20else%20be%20an%20actual%20function.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20function%20should%20match%20the%20sort%20function%20passed%20to%20%60Array.filter%60.%0A%20%20%20%20%20%20%20%20%20*%20Using%20a%20filter%20function%20has%20no%20effect%20on%20the%20underlying%20%60items%60%20array.%0A%20%20%20%20%20%20%20%20%20*%2Ffilter%3A%7Btype%3AFunction%2Cobserver%3A'__filterChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20using%20a%20%60filter%60%20or%20%60sort%60%20function%2C%20the%20%60observe%60%20property%0A%20%20%20%20%20%20%20%20%20*%20should%20be%20set%20to%20a%20space-separated%20list%20of%20the%20names%20of%20item%0A%20%20%20%20%20%20%20%20%20*%20sub-fields%20that%20should%20trigger%20a%20re-sort%20or%20re-filter%20when%20changed.%0A%20%20%20%20%20%20%20%20%20*%20These%20should%20generally%20be%20fields%20of%20%60item%60%20that%20the%20sort%20or%20filter%0A%20%20%20%20%20%20%20%20%20*%20function%20depends%20on.%0A%20%20%20%20%20%20%20%20%20*%2Fobserve%3A%7Btype%3AString%2Cobserver%3A'__observeChanged'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20using%20a%20%60filter%60%20or%20%60sort%60%20function%2C%20the%20%60delay%60%20property%0A%20%20%20%20%20%20%20%20%20*%20determines%20a%20debounce%20time%20in%20ms%20after%20a%20change%20to%20observed%20item%0A%20%20%20%20%20%20%20%20%20*%20properties%20that%20must%20pass%20before%20the%20filter%20or%20sort%20is%20re-run.%0A%20%20%20%20%20%20%20%20%20*%20This%20is%20useful%20in%20rate-limiting%20shuffling%20of%20the%20view%20when%0A%20%20%20%20%20%20%20%20%20*%20item%20changes%20may%20be%20frequent.%0A%20%20%20%20%20%20%20%20%20*%2Fdelay%3ANumber%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Count%20of%20currently%20rendered%20items%20after%20%60filter%60%20(if%20any)%20has%20been%20applied.%0A%20%20%20%20%20%20%20%20%20*%20If%20%22chunking%20mode%22%20is%20enabled%2C%20%60renderedItemCount%60%20is%20updated%20each%20time%20a%0A%20%20%20%20%20%20%20%20%20*%20set%20of%20template%20instances%20is%20rendered.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%2FrenderedItemCount%3A%7Btype%3ANumber%2Cnotify%3Atrue%2CreadOnly%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Defines%20an%20initial%20count%20of%20template%20instances%20to%20render%20after%20setting%0A%20%20%20%20%20%20%20%20%20*%20the%20%60items%60%20array%2C%20before%20the%20next%20paint%2C%20and%20puts%20the%20%60dom-repeat%60%0A%20%20%20%20%20%20%20%20%20*%20into%20%22chunking%20mode%22.%20%20The%20remaining%20items%20will%20be%20created%20and%20rendered%0A%20%20%20%20%20%20%20%20%20*%20incrementally%20at%20each%20animation%20frame%20therof%20until%20all%20instances%20have%0A%20%20%20%20%20%20%20%20%20*%20been%20rendered.%0A%20%20%20%20%20%20%20%20%20*%2FinitialCount%3A%7Btype%3ANumber%2Cobserver%3A'__initializeChunking'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20%60initialCount%60%20is%20used%2C%20this%20property%20defines%20a%20frame%20rate%20(in%0A%20%20%20%20%20%20%20%20%20*%20fps)%20to%20target%20by%20throttling%20the%20number%20of%20instances%20rendered%20each%0A%20%20%20%20%20%20%20%20%20*%20frame%20to%20not%20exceed%20the%20budget%20for%20the%20target%20frame%20rate.%20%20The%0A%20%20%20%20%20%20%20%20%20*%20framerate%20is%20effectively%20the%20number%20of%20%60requestAnimationFrame%60s%20that%0A%20%20%20%20%20%20%20%20%20*%20it%20tries%20to%20allow%20to%20actually%20fire%20in%20a%20given%20second.%20It%20does%20this%0A%20%20%20%20%20%20%20%20%20*%20by%20measuring%20the%20time%20between%20%60rAF%60s%20and%20continuously%20adjusting%20the%0A%20%20%20%20%20%20%20%20%20*%20number%20of%20items%20created%20each%20%60rAF%60%20to%20maintain%20the%20target%20framerate.%0A%20%20%20%20%20%20%20%20%20*%20Setting%20this%20to%20a%20higher%20number%20allows%20lower%20latency%20and%20higher%0A%20%20%20%20%20%20%20%20%20*%20throughput%20for%20event%20handlers%20and%20other%20tasks%2C%20but%20results%20in%20a%0A%20%20%20%20%20%20%20%20%20*%20longer%20time%20for%20the%20remaining%20items%20to%20complete%20rendering.%0A%20%20%20%20%20%20%20%20%20*%2FtargetFramerate%3A%7Btype%3ANumber%2Cvalue%3A20%7D%2C_targetFrameTime%3A%7Btype%3ANumber%2Ccomputed%3A'__computeFrameTime(targetFramerate)'%7D%7D%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Breturn%5B'__itemsChanged(items.*)'%5D%3B%7D%7D%5D)%3Bfunction%20DomRepeat()%7B_classCallCheck(this%2CDomRepeat)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomRepeat.__proto__%7C%7CObject.getPrototypeOf(DomRepeat)).call(this))%3B_this.__instances%3D%5B%5D%3B_this.__limit%3DInfinity%3B_this.__pool%3D%5B%5D%3B_this.__renderDebouncer%3Dnull%3B_this.__itemsIdxToInstIdx%3D%7B%7D%3B_this.__chunkCount%3Dnull%3B_this.__lastChunkTime%3Dnull%3B_this.__sortFn%3Dnull%3B_this.__filterFn%3Dnull%3B_this.__observePaths%3Dnull%3B_this.__ctor%3Dnull%3B_this.__isDetached%3Dtrue%3B_this.template%3Dnull%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(DomRepeat%2C%5B%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(DomRepeat.prototype.__proto__%7C%7CObject.getPrototypeOf(DomRepeat.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bthis.__isDetached%3Dtrue%3Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__detachInstance(i)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(DomRepeat.prototype.__proto__%7C%7CObject.getPrototypeOf(DomRepeat.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.style.display%3D'none'%3B%2F%2F%20only%20perform%20attachment%20if%20the%20element%20was%20previously%20detached.%0Aif(this.__isDetached)%7Bthis.__isDetached%3Dfalse%3Bvar%20parent%3Dthis.parentNode%3Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__attachInstance(i%2Cparent)%3B%7D%7D%7D%7D%2C%7Bkey%3A'__ensureTemplatized'%2Cvalue%3Afunction%20__ensureTemplatized()%7Bvar%20_this2%3Dthis%3B%2F%2F%20Templatizing%20(generating%20the%20instance%20constructor)%20needs%20to%20wait%0A%2F%2F%20until%20ready%2C%20since%20won't%20have%20its%20template%20content%20handed%20back%20to%0A%2F%2F%20it%20until%20then%0Aif(!this.__ctor)%7Bvar%20template%3Dthis.template%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Bif(_this2.querySelector('template'))%7Bobserver.disconnect()%3B_this2.__render()%3B%7Delse%7Bthrow%20new%20Error('dom-repeat%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%20false%3B%7D%2F%2F%20Template%20instance%20props%20that%20should%20be%20excluded%20from%20forwarding%0Avar%20instanceProps%3D%7B%7D%3BinstanceProps%5Bthis.as%5D%3Dtrue%3BinstanceProps%5Bthis.indexAs%5D%3Dtrue%3BinstanceProps%5Bthis.itemsIndexAs%5D%3Dtrue%3Bthis.__ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7BmutableData%3Athis.mutableData%2CparentModel%3Atrue%2CinstanceProps%3AinstanceProps%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20set%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20property%20to%0A%20%20%20%20%20%20%20%20%20%20%20*%2FforwardHostProp%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bvar%20i%24%3Dthis.__instances%3Bfor(var%20i%3D0%2Cinst%3Bi%3Ci%24.length%26%26(inst%3Di%24%5Bi%5D)%3Bi%2B%2B)%7Binst.forwardHostProp(prop%2Cvalue)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20inst%20Instance%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20notify%0A%20%20%20%20%20%20%20%20%20%20%20*%2FnotifyInstanceProp%3Afunction%20notifyInstanceProp(inst%2Cprop%2Cvalue)%7Bif(Polymer.Path.matches(this.as%2Cprop))%7Bvar%20idx%3Dinst%5Bthis.itemsIndexAs%5D%3Bif(prop%3D%3Dthis.as)%7Bthis.items%5Bidx%5D%3Dvalue%3B%7Dvar%20path%3DPolymer.Path.translate(this.as%2C'items.'%2Bidx%2Cprop)%3Bthis.notifyPath(path%2Cvalue)%3B%7D%7D%7D)%3B%7Dreturn%20true%3B%7D%7D%2C%7Bkey%3A'__getMethodHost'%2Cvalue%3Afunction%20__getMethodHost()%7B%2F%2F%20Technically%20this%20should%20be%20the%20owner%20of%20the%20outermost%20template.%0A%2F%2F%20In%20shadow%20dom%2C%20this%20is%20always%20getRootNode().host%2C%20but%20we%20can%0A%2F%2F%20approximate%20this%20via%20cooperation%20with%20our%20dataHost%20always%20setting%0A%2F%2F%20%60_methodHost%60%20as%20long%20as%20there%20were%20bindings%20(or%20id's)%20on%20this%0A%2F%2F%20instance%20causing%20it%20to%20get%20a%20dataHost.%0Areturn%20this.__dataHost._methodHost%7C%7Cthis.__dataHost%3B%7D%7D%2C%7Bkey%3A'__functionFromPropertyValue'%2Cvalue%3Afunction%20__functionFromPropertyValue(functionOrMethodName)%7Bif(typeof%20functionOrMethodName%3D%3D%3D'string')%7Bvar%20methodName%3DfunctionOrMethodName%3Bvar%20obj%3Dthis.__getMethodHost()%3Breturn%20function()%7Breturn%20obj%5BmethodName%5D.apply(obj%2Carguments)%3B%7D%3B%7Dreturn%20functionOrMethodName%3B%7D%7D%2C%7Bkey%3A'__sortChanged'%2Cvalue%3Afunction%20__sortChanged(sort)%7Bthis.__sortFn%3Dthis.__functionFromPropertyValue(sort)%3Bif(this.items)%7Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__filterChanged'%2Cvalue%3Afunction%20__filterChanged(filter)%7Bthis.__filterFn%3Dthis.__functionFromPropertyValue(filter)%3Bif(this.items)%7Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__computeFrameTime'%2Cvalue%3Afunction%20__computeFrameTime(rate)%7Breturn%20Math.ceil(1000%2Frate)%3B%7D%7D%2C%7Bkey%3A'__initializeChunking'%2Cvalue%3Afunction%20__initializeChunking()%7Bif(this.initialCount)%7Bthis.__limit%3Dthis.initialCount%3Bthis.__chunkCount%3Dthis.initialCount%3Bthis.__lastChunkTime%3Dperformance.now()%3B%7D%7D%7D%2C%7Bkey%3A'__tryRenderChunk'%2Cvalue%3Afunction%20__tryRenderChunk()%7B%2F%2F%20Debounced%20so%20that%20multiple%20calls%20through%20%60_render%60%20between%20animation%0A%2F%2F%20frames%20only%20queue%20one%20new%20rAF%20(e.g.%20array%20mutation%20%26%20chunked%20render)%0Aif(this.items%26%26this.__limit%3Cthis.items.length)%7Bthis.__debounceRender(this.__requestRenderChunk)%3B%7D%7D%7D%2C%7Bkey%3A'__requestRenderChunk'%2Cvalue%3Afunction%20__requestRenderChunk()%7Bvar%20_this3%3Dthis%3BrequestAnimationFrame(function()%7Breturn%20_this3.__renderChunk()%3B%7D)%3B%7D%7D%2C%7Bkey%3A'__renderChunk'%2Cvalue%3Afunction%20__renderChunk()%7B%2F%2F%20Simple%20auto%20chunkSize%20throttling%20algorithm%20based%20on%20feedback%20loop%3A%0A%2F%2F%20measure%20actual%20time%20between%20frames%20and%20scale%20chunk%20count%20by%20ratio%0A%2F%2F%20of%20target%2Factual%20frame%20time%0Avar%20currChunkTime%3Dperformance.now()%3Bvar%20ratio%3Dthis._targetFrameTime%2F(currChunkTime-this.__lastChunkTime)%3Bthis.__chunkCount%3DMath.round(this.__chunkCount*ratio)%7C%7C1%3Bthis.__limit%2B%3Dthis.__chunkCount%3Bthis.__lastChunkTime%3DcurrChunkTime%3Bthis.__debounceRender(this.__render)%3B%7D%7D%2C%7Bkey%3A'__observeChanged'%2Cvalue%3Afunction%20__observeChanged()%7Bthis.__observePaths%3Dthis.observe%26%26this.observe.replace('.*'%2C'.').split('%20')%3B%7D%7D%2C%7Bkey%3A'__itemsChanged'%2Cvalue%3Afunction%20__itemsChanged(change)%7Bif(this.items%26%26!Array.isArray(this.items))%7Bconsole.warn('dom-repeat%20expected%20array%20for%20%60items%60%2C%20found'%2Cthis.items)%3B%7D%2F%2F%20If%20path%20was%20to%20an%20item%20(e.g.%20'items.3'%20or%20'items.3.foo')%2C%20forward%20the%0A%2F%2F%20path%20to%20that%20instance%20synchronously%20(returns%20false%20for%20non-item%20paths)%0Aif(!this.__handleItemPath(change.path%2Cchange.value))%7B%2F%2F%20Otherwise%2C%20the%20array%20was%20reset%20('items')%20or%20spliced%20('items.splices')%2C%0A%2F%2F%20so%20queue%20a%20full%20refresh%0Athis.__initializeChunking()%3Bthis.__debounceRender(this.__render)%3B%7D%7D%7D%2C%7Bkey%3A'__handleObservedPaths'%2Cvalue%3Afunction%20__handleObservedPaths(path)%7B%2F%2F%20Handle%20cases%20where%20path%20changes%20should%20cause%20a%20re-sort%2Ffilter%0Aif(this.__sortFn%7C%7Cthis.__filterFn)%7Bif(!path)%7B%2F%2F%20Always%20re-render%20if%20the%20item%20itself%20changed%0Athis.__debounceRender(this.__render%2Cthis.delay)%3B%7Delse%20if(this.__observePaths)%7B%2F%2F%20Otherwise%2C%20re-render%20if%20the%20path%20changed%20matches%20an%20observed%20path%0Avar%20paths%3Dthis.__observePaths%3Bfor(var%20i%3D0%3Bi%3Cpaths.length%3Bi%2B%2B)%7Bif(path.indexOf(paths%5Bi%5D)%3D%3D%3D0)%7Bthis.__debounceRender(this.__render%2Cthis.delay)%3B%7D%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7Bfunction(this%3ADomRepeat)%7D%20fn%20Function%20to%20debounce.%0A%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Delay%20in%20ms%20to%20debounce%20by.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'__debounceRender'%2Cvalue%3Afunction%20__debounceRender(fn)%7Bvar%20delay%3Darguments.length%3E1%26%26arguments%5B1%5D!%3D%3Dundefined%3Farguments%5B1%5D%3A0%3Bthis.__renderDebouncer%3DPolymer.Debouncer.debounce(this.__renderDebouncer%2Cdelay%3E0%3FPolymer.Async.timeOut.after(delay)%3APolymer.Async.microTask%2Cfn.bind(this))%3BPolymer.enqueueDebouncer(this.__renderDebouncer)%3B%7D%2F**%0A%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20Normally%20rendering%20is%0A%20%20%20%20%20*%20asynchronous%20to%20a%20provoking%20change.%20This%20is%20done%20for%20efficiency%20so%0A%20%20%20%20%20*%20that%20multiple%20changes%20trigger%20only%20a%20single%20render.%20The%20render%20method%0A%20%20%20%20%20*%20should%20be%20called%20if%2C%20for%20example%2C%20template%20rendering%20is%20required%20to%0A%20%20%20%20%20*%20validate%20application%20state.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7B%2F%2F%20Queue%20this%20repeater%2C%20then%20flush%20all%20in%20order%0Athis.__debounceRender(this.__render)%3BPolymer.flush()%3B%7D%7D%2C%7Bkey%3A'__render'%2Cvalue%3Afunction%20__render()%7Bif(!this.__ensureTemplatized())%7B%2F%2F%20No%20template%20found%20yet%0Areturn%3B%7Dthis.__applyFullRefresh()%3B%2F%2F%20Reset%20the%20pool%0A%2F%2F%20TODO(kschaaf)%3A%20Reuse%20pool%20across%20turns%20and%20nested%20templates%0A%2F%2F%20Now%20that%20objects%2Farrays%20are%20re-evaluated%20when%20set%2C%20we%20can%20safely%0A%2F%2F%20reuse%20pooled%20instances%20across%20turns%2C%20however%20we%20still%20need%20to%20decide%0A%2F%2F%20semantics%20regarding%20how%20long%20to%20hold%2C%20how%20many%20to%20hold%2C%20etc.%0Athis.__pool.length%3D0%3B%2F%2F%20Set%20rendered%20item%20count%0Athis._setRenderedItemCount(this.__instances.length)%3B%2F%2F%20Notify%20users%0Athis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3B%2F%2F%20Check%20to%20see%20if%20we%20need%20to%20render%20more%20items%0Athis.__tryRenderChunk()%3B%7D%7D%2C%7Bkey%3A'__applyFullRefresh'%2Cvalue%3Afunction%20__applyFullRefresh()%7Bvar%20_this4%3Dthis%3Bvar%20items%3Dthis.items%7C%7C%5B%5D%3Bvar%20isntIdxToItemsIdx%3Dnew%20Array(items.length)%3Bfor(var%20i%3D0%3Bi%3Citems.length%3Bi%2B%2B)%7BisntIdxToItemsIdx%5Bi%5D%3Di%3B%7D%2F%2F%20Apply%20user%20filter%0Aif(this.__filterFn)%7BisntIdxToItemsIdx%3DisntIdxToItemsIdx.filter(function(i%2Cidx%2Carray)%7Breturn%20_this4.__filterFn(items%5Bi%5D%2Cidx%2Carray)%3B%7D)%3B%7D%2F%2F%20Apply%20user%20sort%0Aif(this.__sortFn)%7BisntIdxToItemsIdx.sort(function(a%2Cb)%7Breturn%20_this4.__sortFn(items%5Ba%5D%2Citems%5Bb%5D)%3B%7D)%3B%7D%2F%2F%20items-%3Einst%20map%20kept%20for%20item%20path%20forwarding%0Avar%20itemsIdxToInstIdx%3Dthis.__itemsIdxToInstIdx%3D%7B%7D%3Bvar%20instIdx%3D0%3B%2F%2F%20Generate%20instances%20and%20assign%20items%0Avar%20limit%3DMath.min(isntIdxToItemsIdx.length%2Cthis.__limit)%3Bfor(%3BinstIdx%3Climit%3BinstIdx%2B%2B)%7Bvar%20inst%3Dthis.__instances%5BinstIdx%5D%3Bvar%20itemIdx%3DisntIdxToItemsIdx%5BinstIdx%5D%3Bvar%20item%3Ditems%5BitemIdx%5D%3BitemsIdxToInstIdx%5BitemIdx%5D%3DinstIdx%3Bif(inst)%7Binst._setPendingProperty(this.as%2Citem)%3Binst._setPendingProperty(this.indexAs%2CinstIdx)%3Binst._setPendingProperty(this.itemsIndexAs%2CitemIdx)%3Binst._flushProperties()%3B%7Delse%7Bthis.__insertInstance(item%2CinstIdx%2CitemIdx)%3B%7D%7D%2F%2F%20Remove%20any%20extra%20instances%20from%20previous%20state%0Afor(var%20_i%3Dthis.__instances.length-1%3B_i%3E%3DinstIdx%3B_i--)%7Bthis.__detachAndRemoveInstance(_i)%3B%7D%7D%7D%2C%7Bkey%3A'__detachInstance'%2Cvalue%3Afunction%20__detachInstance(idx)%7Bvar%20inst%3Dthis.__instances%5Bidx%5D%3Bfor(var%20i%3D0%3Bi%3Cinst.children.length%3Bi%2B%2B)%7Bvar%20el%3Dinst.children%5Bi%5D%3Binst.root.appendChild(el)%3B%7Dreturn%20inst%3B%7D%7D%2C%7Bkey%3A'__attachInstance'%2Cvalue%3Afunction%20__attachInstance(idx%2Cparent)%7Bvar%20inst%3Dthis.__instances%5Bidx%5D%3Bparent.insertBefore(inst.root%2Cthis)%3B%7D%7D%2C%7Bkey%3A'__detachAndRemoveInstance'%2Cvalue%3Afunction%20__detachAndRemoveInstance(idx)%7Bvar%20inst%3Dthis.__detachInstance(idx)%3Bif(inst)%7Bthis.__pool.push(inst)%3B%7Dthis.__instances.splice(idx%2C1)%3B%7D%7D%2C%7Bkey%3A'__stampInstance'%2Cvalue%3Afunction%20__stampInstance(item%2CinstIdx%2CitemIdx)%7Bvar%20model%3D%7B%7D%3Bmodel%5Bthis.as%5D%3Ditem%3Bmodel%5Bthis.indexAs%5D%3DinstIdx%3Bmodel%5Bthis.itemsIndexAs%5D%3DitemIdx%3Breturn%20new%20this.__ctor(model)%3B%7D%7D%2C%7Bkey%3A'__insertInstance'%2Cvalue%3Afunction%20__insertInstance(item%2CinstIdx%2CitemIdx)%7Bvar%20inst%3Dthis.__pool.pop()%3Bif(inst)%7B%2F%2F%20TODO(kschaaf)%3A%20If%20the%20pool%20is%20shared%20across%20turns%2C%20hostProps%0A%2F%2F%20need%20to%20be%20re-set%20to%20reused%20instances%20in%20addition%20to%20item%0Ainst._setPendingProperty(this.as%2Citem)%3Binst._setPendingProperty(this.indexAs%2CinstIdx)%3Binst._setPendingProperty(this.itemsIndexAs%2CitemIdx)%3Binst._flushProperties()%3B%7Delse%7Binst%3Dthis.__stampInstance(item%2CinstIdx%2CitemIdx)%3B%7Dvar%20beforeRow%3Dthis.__instances%5BinstIdx%2B1%5D%3Bvar%20beforeNode%3DbeforeRow%3FbeforeRow.children%5B0%5D%3Athis%3Bthis.parentNode.insertBefore(inst.root%2CbeforeNode)%3Bthis.__instances%5BinstIdx%5D%3Dinst%3Breturn%20inst%3B%7D%2F%2F%20Implements%20extension%20point%20from%20Templatize%20mixin%0A%2F**%0A%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hidden%20Set%20to%20true%20to%20hide%20the%20children%3B%0A%20%20%20%20%20*%20set%20to%20false%20to%20show%20them.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren(hidden)%7Bfor(var%20i%3D0%3Bi%3Cthis.__instances.length%3Bi%2B%2B)%7Bthis.__instances%5Bi%5D._showHideChildren(hidden)%3B%7D%7D%2F%2F%20Called%20as%20a%20side%20effect%20of%20a%20host%20items.%3Ckey%3E.%3Cpath%3E%20path%20change%2C%0A%2F%2F%20responsible%20for%20notifying%20item.%3Cpath%3E%20changes%20to%20inst%20for%20key%0A%7D%2C%7Bkey%3A'__handleItemPath'%2Cvalue%3Afunction%20__handleItemPath(path%2Cvalue)%7Bvar%20itemsPath%3Dpath.slice(6)%3B%2F%2F%20'items.'.length%20%3D%3D%206%0Avar%20dot%3DitemsPath.indexOf('.')%3Bvar%20itemsIdx%3Ddot%3C0%3FitemsPath%3AitemsPath.substring(0%2Cdot)%3B%2F%2F%20If%20path%20was%20index%20into%20array...%0Aif(itemsIdx%3D%3DparseInt(itemsIdx%2C10))%7Bvar%20itemSubPath%3Ddot%3C0%3F''%3AitemsPath.substring(dot%2B1)%3B%2F%2F%20If%20the%20path%20is%20observed%2C%20it%20will%20trigger%20a%20full%20refresh%0Athis.__handleObservedPaths(itemSubPath)%3B%2F%2F%20Note%2C%20even%20if%20a%20rull%20refresh%20is%20triggered%2C%20always%20do%20the%20path%0A%2F%2F%20notification%20because%20unless%20mutableData%20is%20used%20for%20dom-repeat%0A%2F%2F%20and%20all%20elements%20in%20the%20instance%20subtree%2C%20a%20full%20refresh%20may%0A%2F%2F%20not%20trigger%20the%20proper%20update.%0Avar%20instIdx%3Dthis.__itemsIdxToInstIdx%5BitemsIdx%5D%3Bvar%20inst%3Dthis.__instances%5BinstIdx%5D%3Bif(inst)%7Bvar%20itemPath%3Dthis.as%2B(itemSubPath%3F'.'%2BitemSubPath%3A'')%3B%2F%2F%20This%20is%20effectively%20%60notifyPath%60%2C%20but%20avoids%20some%20of%20the%20overhead%0A%2F%2F%20of%20the%20public%20API%0Ainst._setPendingPropertyOrPath(itemPath%2Cvalue%2Cfalse%2Ctrue)%3Binst._flushProperties()%3B%7Dreturn%20true%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20item%20associated%20with%20a%20given%20element%20stamped%20by%0A%20%20%20%20%20*%20this%20%60dom-repeat%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%2C%20to%20modify%20sub-properties%20of%20the%20item%2C%0A%20%20%20%20%20*%20%60modelForElement(el).set('item.%3Csub-prop%3E'%2C%20value)%60%0A%20%20%20%20%20*%20should%20be%20used.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20the%20item.%0A%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20associated%20with%20the%20element.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'itemForElement'%2Cvalue%3Afunction%20itemForElement(el)%7Bvar%20instance%3Dthis.modelForElement(el)%3Breturn%20instance%26%26instance%5Bthis.as%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20inst%20index%20for%20a%20given%20element%20stamped%20by%20this%20%60dom-repeat%60.%0A%20%20%20%20%20*%20If%20%60sort%60%20is%20provided%2C%20the%20index%20will%20reflect%20the%20sorted%20order%20(rather%0A%20%20%20%20%20*%20than%20the%20original%20array%20order).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20the%20index.%0A%20%20%20%20%20*%20%40return%20%7B%3Fnumber%7D%20Row%20index%20associated%20with%20the%20element%20(note%20this%20may%0A%20%20%20%20%20*%20%20%20not%20correspond%20to%20the%20array%20index%20if%20a%20user%20%60sort%60%20is%20applied).%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'indexForElement'%2Cvalue%3Afunction%20indexForElement(el)%7Bvar%20instance%3Dthis.modelForElement(el)%3Breturn%20instance%26%26instance%5Bthis.indexAs%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20associated%20with%20a%20given%20element%2C%20which%0A%20%20%20%20%20*%20serves%20as%20the%20binding%20scope%20for%20the%20template%20instance%20the%20element%20is%0A%20%20%20%20%20*%20contained%20in.%20A%20template%20model%20is%20an%20instance%20of%20%60Polymer.Base%60%2C%20and%0A%20%20%20%20%20*%20should%20be%20used%20to%20manipulate%20data%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20let%20model%20%3D%20modelForElement(el)%3B%0A%20%20%20%20%20*%20%20%20if%20(model.index%20%3C%2010)%20%7B%0A%20%20%20%20%20*%20%20%20%20%20model.set('item.checked'%2C%20true)%3B%0A%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20el%20Element%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Model%20representing%20the%20binding%20scope%20for%0A%20%20%20%20%20*%20%20%20the%20element.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'modelForElement'%2Cvalue%3Afunction%20modelForElement(el)%7Breturn%20Polymer.Templatize.modelForElement(this.template%2Cel)%3B%7D%7D%5D)%3Breturn%20DomRepeat%3B%7D(domRepeatBase)%3BcustomElements.define(DomRepeat.is%2CDomRepeat)%3B%2F**%20%40const%20*%2FPolymer.DomRepeat%3DDomRepeat%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-repeat.html.js%0A",
            "totalBytes": 25690,
            "wastedBytes": 14164,
            "wastedPercent": 55.13429349941612
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20detect%20native%20touch%20action%20support%0Avar%20HAS_NATIVE_TA%3Dtypeof%20document.head.style.touchAction%3D%3D%3D'string'%3Bvar%20GESTURE_KEY%3D'__polymerGestures'%3Bvar%20HANDLED_OBJ%3D'__polymerGesturesHandled'%3Bvar%20TOUCH_ACTION%3D'__polymerGesturesTouchAction'%3B%2F%2F%20radius%20for%20tap%20and%20track%0Avar%20TAP_DISTANCE%3D25%3Bvar%20TRACK_DISTANCE%3D5%3B%2F%2F%20number%20of%20last%20N%20track%20positions%20to%20keep%0Avar%20TRACK_LENGTH%3D2%3B%2F%2F%20Disabling%20%22mouse%22%20handlers%20for%202500ms%20is%20enough%0Avar%20MOUSE_TIMEOUT%3D2500%3Bvar%20MOUSE_EVENTS%3D%5B'mousedown'%2C'mousemove'%2C'mouseup'%2C'click'%5D%3B%2F%2F%20an%20array%20of%20bitmask%20values%20for%20mapping%20MouseEvent.which%20to%20MouseEvent.buttons%0Avar%20MOUSE_WHICH_TO_BUTTONS%3D%5B0%2C1%2C4%2C2%5D%3Bvar%20MOUSE_HAS_BUTTONS%3Dfunction()%7Btry%7Breturn%20new%20MouseEvent('test'%2C%7Bbuttons%3A1%7D).buttons%3D%3D%3D1%3B%7Dcatch(e)%7Breturn%20false%3B%7D%7D()%3B%2F**%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20Possible%20mouse%20event%20name%0A%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20mouse%20event%2C%20false%20if%20not%0A%20%20%20*%2Ffunction%20isMouseEvent(name)%7Breturn%20MOUSE_EVENTS.indexOf(name)%3E-1%3B%7D%2F*%20eslint%20no-empty%3A%20%5B%22error%22%2C%20%7B%20%22allowEmptyCatch%22%3A%20true%20%7D%5D%20*%2F%2F%2F%20check%20for%20passive%20event%20listeners%0Avar%20SUPPORTS_PASSIVE%3Dfalse%3B(function()%7Btry%7Bvar%20opts%3DObject.defineProperty(%7B%7D%2C'passive'%2C%7Bget%3Afunction%20get()%7BSUPPORTS_PASSIVE%3Dtrue%3B%7D%7D)%3Bwindow.addEventListener('test'%2Cnull%2Copts)%3Bwindow.removeEventListener('test'%2Cnull%2Copts)%3B%7Dcatch(e)%7B%7D%7D)()%3B%2F**%0A%20%20%20*%20Generate%20settings%20for%20event%20listeners%2C%20dependant%20on%20%60Polymer.passiveTouchGestures%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Event%20name%20to%20determine%20if%20%60%7Bpassive%7D%60%20option%20is%20needed%0A%20%20%20*%20%40return%20%7B%7Bpassive%3A%20boolean%7D%20%7C%20undefined%7D%20Options%20to%20use%20for%20addEventListener%20and%20removeEventListener%0A%20%20%20*%2Ffunction%20PASSIVE_TOUCH(eventName)%7Bif(isMouseEvent(eventName)%7C%7CeventName%3D%3D%3D'touchend')%7Breturn%3B%7Dif(HAS_NATIVE_TA%26%26SUPPORTS_PASSIVE%26%26Polymer.passiveTouchGestures)%7Breturn%7Bpassive%3Atrue%7D%3B%7Delse%7Breturn%3B%7D%7D%2F%2F%20Check%20for%20touch-only%20devices%0Avar%20IS_TOUCH_ONLY%3Dnavigator.userAgent.match(%2FiP(%3F%3A%5Boa%5Dd%7Chone)%7CAndroid%2F)%3Bvar%20GestureRecognizer%3Dfunction%20GestureRecognizer()%7B%7D%3B%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%20%40type%20%7Bfunction()%3A%20void%7D%20*%2FGestureRecognizer.prototype.reset%3B%2F**%20%40type%20%7Bfunction(MouseEvent)%3A%20void%20%7C%20undefined%7D%20*%2FGestureRecognizer.prototype.mousedown%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.mousemove%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.mouseup%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchstart%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchmove%3B%2F**%20%40type%20%7B(function(TouchEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.touchend%3B%2F**%20%40type%20%7B(function(MouseEvent)%3A%20void%20%7C%20undefined)%7D%20*%2FGestureRecognizer.prototype.click%3B%2F%2F%20keep%20track%20of%20any%20labels%20hit%20by%20the%20mouseCanceller%0A%2F**%20%40type%20%7B!Array%3C!HTMLLabelElement%3E%7D%20*%2Fvar%20clickedLabels%3D%5B%5D%3B%2F**%20%40type%20%7B!Object%3Cboolean%3E%7D%20*%2Fvar%20labellable%3D%7B'button'%3Atrue%2C'input'%3Atrue%2C'keygen'%3Atrue%2C'meter'%3Atrue%2C'output'%3Atrue%2C'textarea'%3Atrue%2C'progress'%3Atrue%2C'select'%3Atrue%7D%3B%2F%2F%20Defined%20at%20https%3A%2F%2Fhtml.spec.whatwg.org%2Fmultipage%2Fform-control-infrastructure.html%23enabling-and-disabling-form-controls%3A-the-disabled-attribute%0A%2F**%20%40type%20%7B!Object%3Cboolean%3E%7D%20*%2Fvar%20canBeDisabled%3D%7B'button'%3Atrue%2C'command'%3Atrue%2C'fieldset'%3Atrue%2C'input'%3Atrue%2C'keygen'%3Atrue%2C'optgroup'%3Atrue%2C'option'%3Atrue%2C'select'%3Atrue%2C'textarea'%3Atrue%7D%3B%2F**%0A%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20to%20check%20labelling%20status%0A%20%20%20*%20%40return%20%7Bboolean%7D%20element%20can%20have%20labels%0A%20%20%20*%2Ffunction%20canBeLabelled(el)%7Breturn%20labellable%5Bel.localName%5D%7C%7Cfalse%3B%7D%2F**%0A%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20that%20may%20be%20labelled.%0A%20%20%20*%20%40return%20%7B!Array%3C!HTMLLabelElement%3E%7D%20Relevant%20label%20for%20%60el%60%0A%20%20%20*%2Ffunction%20matchingLabels(el)%7Bvar%20labels%3DArray.from(%2F**%20%40type%20%7BHTMLInputElement%7D%20*%2Fel.labels%7C%7C%5B%5D)%3B%2F%2F%20IE%20doesn't%20have%20%60labels%60%20and%20Safari%20doesn't%20populate%20%60labels%60%0A%2F%2F%20if%20element%20is%20in%20a%20shadowroot.%0A%2F%2F%20In%20this%20instance%2C%20finding%20the%20non-ancestor%20labels%20is%20enough%2C%0A%2F%2F%20as%20the%20mouseCancellor%20code%20will%20handle%20ancstor%20labels%0Aif(!labels.length)%7Blabels%3D%5B%5D%3Bvar%20root%3Del.getRootNode()%3B%2F%2F%20if%20there%20is%20an%20id%20on%20%60el%60%2C%20check%20for%20all%20labels%20with%20a%20matching%20%60for%60%20attribute%0Aif(el.id)%7Bvar%20matching%3Droot.querySelectorAll('label%5Bfor%20%3D%20'%2Bel.id%2B'%5D')%3Bfor(var%20i%3D0%3Bi%3Cmatching.length%3Bi%2B%2B)%7Blabels.push(%2F**%20%40type%20%7B!HTMLLabelElement%7D%20*%2Fmatching%5Bi%5D)%3B%7D%7D%7Dreturn%20labels%3B%7D%2F%2F%20touch%20will%20make%20synthetic%20mouse%20events%0A%2F%2F%20%60preventDefault%60%20on%20touchend%20will%20cancel%20them%2C%0A%2F%2F%20but%20this%20breaks%20%60%3Cinput%3E%60%20focus%20and%20link%20clicks%0A%2F%2F%20disable%20mouse%20handlers%20for%20MOUSE_TIMEOUT%20ms%20after%0A%2F%2F%20a%20touchend%20to%20ignore%20synthetic%20mouse%20events%0Avar%20mouseCanceller%3Dfunction%20mouseCanceller(mouseEvent)%7B%2F%2F%20Check%20for%20sourceCapabilities%2C%20used%20to%20distinguish%20synthetic%20events%0A%2F%2F%20if%20mouseEvent%20did%20not%20come%20from%20a%20device%20that%20fires%20touch%20events%2C%0A%2F%2F%20it%20was%20made%20by%20a%20real%20mouse%20and%20should%20be%20counted%0A%2F%2F%20http%3A%2F%2Fwicg.github.io%2FInputDeviceCapabilities%2F%23dom-inputdevicecapabilities-firestouchevents%0Avar%20sc%3DmouseEvent.sourceCapabilities%3Bif(sc%26%26!sc.firesTouchEvents)%7Breturn%3B%7D%2F%2F%20skip%20synthetic%20mouse%20events%0AmouseEvent%5BHANDLED_OBJ%5D%3D%7Bskip%3Atrue%7D%3B%2F%2F%20disable%20%22ghost%20clicks%22%0Aif(mouseEvent.type%3D%3D%3D'click')%7Bvar%20clickFromLabel%3Dfalse%3Bvar%20path%3DmouseEvent.composedPath%26%26mouseEvent.composedPath()%3Bif(path)%7Bfor(var%20i%3D0%3Bi%3Cpath.length%3Bi%2B%2B)%7Bif(path%5Bi%5D.nodeType%3D%3D%3DNode.ELEMENT_NODE)%7Bif(path%5Bi%5D.localName%3D%3D%3D'label')%7BclickedLabels.push(path%5Bi%5D)%3B%7Delse%20if(canBeLabelled(path%5Bi%5D))%7Bvar%20ownerLabels%3DmatchingLabels(path%5Bi%5D)%3B%2F%2F%20check%20if%20one%20of%20the%20clicked%20labels%20is%20labelling%20this%20element%0Afor(var%20j%3D0%3Bj%3CownerLabels.length%3Bj%2B%2B)%7BclickFromLabel%3DclickFromLabel%7C%7CclickedLabels.indexOf(ownerLabels%5Bj%5D)%3E-1%3B%7D%7D%7Dif(path%5Bi%5D%3D%3D%3DPOINTERSTATE.mouse.target)%7Breturn%3B%7D%7D%7D%2F%2F%20if%20one%20of%20the%20clicked%20labels%20was%20labelling%20the%20target%20element%2C%0A%2F%2F%20this%20is%20not%20a%20ghost%20click%0Aif(clickFromLabel)%7Breturn%3B%7DmouseEvent.preventDefault()%3BmouseEvent.stopPropagation()%3B%7D%7D%3B%2F**%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setup%20True%20to%20add%2C%20false%20to%20remove.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20setupTeardownMouseCanceller(setup)%7Bvar%20events%3DIS_TOUCH_ONLY%3F%5B'click'%5D%3AMOUSE_EVENTS%3Bfor(var%20i%3D0%2Cen%3Bi%3Cevents.length%3Bi%2B%2B)%7Ben%3Devents%5Bi%5D%3Bif(setup)%7B%2F%2F%20reset%20clickLabels%20array%0AclickedLabels.length%3D0%3Bdocument.addEventListener(en%2CmouseCanceller%2Ctrue)%3B%7Delse%7Bdocument.removeEventListener(en%2CmouseCanceller%2Ctrue)%3B%7D%7D%7Dfunction%20ignoreMouse(e)%7Bif(!POINTERSTATE.mouse.mouseIgnoreJob)%7BsetupTeardownMouseCanceller(true)%3B%7Dvar%20unset%3Dfunction%20unset()%7BsetupTeardownMouseCanceller()%3BPOINTERSTATE.mouse.target%3Dnull%3BPOINTERSTATE.mouse.mouseIgnoreJob%3Dnull%3B%7D%3BPOINTERSTATE.mouse.target%3De.composedPath()%5B0%5D%3BPOINTERSTATE.mouse.mouseIgnoreJob%3DPolymer.Debouncer.debounce(POINTERSTATE.mouse.mouseIgnoreJob%2CPolymer.Async.timeOut.after(MOUSE_TIMEOUT)%2Cunset)%3B%7D%2F**%0A%20%20%20*%20%40param%20%7BMouseEvent%7D%20ev%20event%20to%20test%20for%20left%20mouse%20button%20down%0A%20%20%20*%20%40return%20%7Bboolean%7D%20has%20left%20mouse%20button%20down%0A%20%20%20*%2Ffunction%20hasLeftMouseButton(ev)%7Bvar%20type%3Dev.type%3B%2F%2F%20exit%20early%20if%20the%20event%20is%20not%20a%20mouse%20event%0Aif(!isMouseEvent(type))%7Breturn%20false%3B%7D%2F%2F%20ev.button%20is%20not%20reliable%20for%20mousemove%20(0%20is%20overloaded%20as%20both%20left%20button%20and%20no%20buttons)%0A%2F%2F%20instead%20we%20use%20ev.buttons%20(bitmask%20of%20buttons)%20or%20fall%20back%20to%20ev.which%20(deprecated%2C%200%20for%20no%20buttons%2C%201%20for%20left%20button)%0Aif(type%3D%3D%3D'mousemove')%7B%2F%2F%20allow%20undefined%20for%20testing%20events%0Avar%20buttons%3Dev.buttons%3D%3D%3Dundefined%3F1%3Aev.buttons%3Bif(ev%20instanceof%20window.MouseEvent%26%26!MOUSE_HAS_BUTTONS)%7Bbuttons%3DMOUSE_WHICH_TO_BUTTONS%5Bev.which%5D%7C%7C0%3B%7D%2F%2F%20buttons%20is%20a%20bitmask%2C%20check%20that%20the%20left%20button%20bit%20is%20set%20(1)%0Areturn%20Boolean(buttons%261)%3B%7Delse%7B%2F%2F%20allow%20undefined%20for%20testing%20events%0Avar%20button%3Dev.button%3D%3D%3Dundefined%3F0%3Aev.button%3B%2F%2F%20ev.button%20is%200%20in%20mousedown%2Fmouseup%2Fclick%20for%20left%20button%20activation%0Areturn%20button%3D%3D%3D0%3B%7D%7Dfunction%20isSyntheticClick(ev)%7Bif(ev.type%3D%3D%3D'click')%7B%2F%2F%20ev.detail%20is%200%20for%20HTMLElement.click%20in%20most%20browsers%0Aif(ev.detail%3D%3D%3D0)%7Breturn%20true%3B%7D%2F%2F%20in%20the%20worst%20case%2C%20check%20that%20the%20x%2Fy%20position%20of%20the%20click%20is%20within%0A%2F%2F%20the%20bounding%20box%20of%20the%20target%20of%20the%20event%0A%2F%2F%20Thanks%20IE%2010%20%3E%3A(%0Avar%20t%3DGestures._findOriginalTarget(ev)%3B%2F%2F%20make%20sure%20the%20target%20of%20the%20event%20is%20an%20element%20so%20we%20can%20use%20getBoundingClientRect%2C%0A%2F%2F%20if%20not%2C%20just%20assume%20it%20is%20a%20synthetic%20click%0Aif(!t.nodeType%7C%7C%2F**%20%40type%20%7BElement%7D%20*%2Ft.nodeType!%3D%3DNode.ELEMENT_NODE)%7Breturn%20true%3B%7Dvar%20bcr%3D%2F**%20%40type%20%7BElement%7D%20*%2Ft.getBoundingClientRect()%3B%2F%2F%20use%20page%20x%2Fy%20to%20account%20for%20scrolling%0Avar%20x%3Dev.pageX%2Cy%3Dev.pageY%3B%2F%2F%20ev%20is%20a%20synthetic%20click%20if%20the%20position%20is%20outside%20the%20bounding%20box%20of%20the%20target%0Areturn!(x%3E%3Dbcr.left%26%26x%3C%3Dbcr.right%26%26y%3E%3Dbcr.top%26%26y%3C%3Dbcr.bottom)%3B%7Dreturn%20false%3B%7Dvar%20POINTERSTATE%3D%7Bmouse%3A%7Btarget%3Anull%2CmouseIgnoreJob%3Anull%7D%2Ctouch%3A%7Bx%3A0%2Cy%3A0%2Cid%3A-1%2CscrollDecided%3Afalse%7D%7D%3Bfunction%20firstTouchAction(ev)%7Bvar%20ta%3D'auto'%3Bvar%20path%3Dev.composedPath%26%26ev.composedPath()%3Bif(path)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cpath.length%3Bi%2B%2B)%7Bn%3Dpath%5Bi%5D%3Bif(n%5BTOUCH_ACTION%5D)%7Bta%3Dn%5BTOUCH_ACTION%5D%3Bbreak%3B%7D%7D%7Dreturn%20ta%3B%7Dfunction%20trackDocument(stateObj%2Cmovefn%2Cupfn)%7BstateObj.movefn%3Dmovefn%3BstateObj.upfn%3Dupfn%3Bdocument.addEventListener('mousemove'%2Cmovefn)%3Bdocument.addEventListener('mouseup'%2Cupfn)%3B%7Dfunction%20untrackDocument(stateObj)%7Bdocument.removeEventListener('mousemove'%2CstateObj.movefn)%3Bdocument.removeEventListener('mouseup'%2CstateObj.upfn)%3BstateObj.movefn%3Dnull%3BstateObj.upfn%3Dnull%3B%7D%2F%2F%20use%20a%20document-wide%20touchend%20listener%20to%20start%20the%20ghost-click%20prevention%20mechanism%0A%2F%2F%20Use%20passive%20event%20listeners%2C%20if%20supported%2C%20to%20not%20affect%20scrolling%20performance%0Adocument.addEventListener('touchend'%2CignoreMouse%2CSUPPORTS_PASSIVE%3F%7Bpassive%3Atrue%7D%3Afalse)%3B%2F**%0A%20%20%20*%20Module%20for%20adding%20listeners%20to%20a%20node%20for%20the%20following%20normalized%0A%20%20%20*%20cross-platform%20%22gesture%22%20events%3A%0A%20%20%20*%20-%20%60down%60%20-%20mouse%20or%20touch%20went%20down%0A%20%20%20*%20-%20%60up%60%20-%20mouse%20or%20touch%20went%20up%0A%20%20%20*%20-%20%60tap%60%20-%20mouse%20click%20or%20finger%20tap%0A%20%20%20*%20-%20%60track%60%20-%20mouse%20drag%20or%20touch%20move%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20for%20adding%20cross-platform%20gesture%20event%20listeners.%0A%20%20%20*%2Fvar%20Gestures%3D%7Bgestures%3A%7B%7D%2Crecognizers%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20Finds%20the%20element%20rendered%20on%20the%20screen%20at%20the%20provided%20coordinates.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Similar%20to%20%60document.elementFromPoint%60%2C%20but%20pierces%20through%0A%20%20%20%20%20*%20shadow%20roots.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%20Horizontal%20pixel%20coordinate%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%20Vertical%20pixel%20coordinate%0A%20%20%20%20%20*%20%40return%20%7BElement%7D%20Returns%20the%20deepest%20shadowRoot%20inclusive%20element%0A%20%20%20%20%20*%20found%20at%20the%20screen%20position%20given.%0A%20%20%20%20%20*%2FdeepTargetFind%3Afunction%20deepTargetFind(x%2Cy)%7Bvar%20node%3Ddocument.elementFromPoint(x%2Cy)%3Bvar%20next%3Dnode%3B%2F%2F%20this%20code%20path%20is%20only%20taken%20when%20native%20ShadowDOM%20is%20used%0A%2F%2F%20if%20there%20is%20a%20shadowroot%2C%20it%20may%20have%20a%20node%20at%20x%2Fy%0A%2F%2F%20if%20there%20is%20not%20a%20shadowroot%2C%20exit%20the%20loop%0Awhile(next%26%26next.shadowRoot%26%26!window.ShadyDOM)%7B%2F%2F%20if%20there%20is%20a%20node%20at%20x%2Fy%20in%20the%20shadowroot%2C%20look%20deeper%0Avar%20oldNext%3Dnext%3Bnext%3Dnext.shadowRoot.elementFromPoint(x%2Cy)%3B%2F%2F%20on%20Safari%2C%20elementFromPoint%20may%20return%20the%20shadowRoot%20host%0Aif(oldNext%3D%3D%3Dnext)%7Bbreak%3B%7Dif(next)%7Bnode%3Dnext%3B%7D%7Dreturn%20node%3B%7D%2C%2F**%0A%20%20%20%20%20*%20a%20cheaper%20check%20than%20ev.composedPath()%5B0%5D%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7BEventTarget%7D%20Returns%20the%20event%20target.%0A%20%20%20%20%20*%2F_findOriginalTarget%3Afunction%20_findOriginalTarget(ev)%7B%2F%2F%20shadowdom%0Aif(ev.composedPath)%7Bvar%20targets%3D%2F**%20%40type%20%7B!Array%3C!EventTarget%3E%7D%20*%2Fev.composedPath()%3B%2F%2F%20It%20shouldn't%20be%2C%20but%20sometimes%20targets%20is%20empty%20(window%20on%20Safari).%0Areturn%20targets.length%3E0%3Ftargets%5B0%5D%3Aev.target%3B%7D%2F%2F%20shadydom%0Areturn%20ev.target%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_handleNative%3Afunction%20_handleNative(ev)%7Bvar%20handled%3Dvoid%200%3Bvar%20type%3Dev.type%3Bvar%20node%3Dev.currentTarget%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(!gobj)%7Breturn%3B%7Dvar%20gs%3Dgobj%5Btype%5D%3Bif(!gs)%7Breturn%3B%7Dif(!ev%5BHANDLED_OBJ%5D)%7Bev%5BHANDLED_OBJ%5D%3D%7B%7D%3Bif(type.slice(0%2C5)%3D%3D%3D'touch')%7Bev%3D%2F**%20%40type%20%7BTouchEvent%7D%20*%2Fev%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Avar%20t%3Dev.changedTouches%5B0%5D%3Bif(type%3D%3D%3D'touchstart')%7B%2F%2F%20only%20handle%20the%20first%20finger%0Aif(ev.touches.length%3D%3D%3D1)%7BPOINTERSTATE.touch.id%3Dt.identifier%3B%7D%7Dif(POINTERSTATE.touch.id!%3D%3Dt.identifier)%7Breturn%3B%7Dif(!HAS_NATIVE_TA)%7Bif(type%3D%3D%3D'touchstart'%7C%7Ctype%3D%3D%3D'touchmove')%7BGestures._handleTouchAction(ev)%3B%7D%7D%7D%7Dhandled%3Dev%5BHANDLED_OBJ%5D%3B%2F%2F%20used%20to%20ignore%20synthetic%20mouse%20events%0Aif(handled.skip)%7Breturn%3B%7D%2F%2F%20reset%20recognizer%20state%0Afor(var%20i%3D0%2Cr%3Bi%3CGestures.recognizers.length%3Bi%2B%2B)%7Br%3DGestures.recognizers%5Bi%5D%3Bif(gs%5Br.name%5D%26%26!handled%5Br.name%5D)%7Bif(r.flow%26%26r.flow.start.indexOf(ev.type)%3E-1%26%26r.reset)%7Br.reset()%3B%7D%7D%7D%2F%2F%20enforce%20gesture%20recognizer%20order%0Afor(var%20_i%3D0%2C_r%3B_i%3CGestures.recognizers.length%3B_i%2B%2B)%7B_r%3DGestures.recognizers%5B_i%5D%3Bif(gs%5B_r.name%5D%26%26!handled%5B_r.name%5D)%7Bhandled%5B_r.name%5D%3Dtrue%3B_r%5Btype%5D(ev)%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20ev%20Event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_handleTouchAction%3Afunction%20_handleTouchAction(ev)%7Bvar%20t%3Dev.changedTouches%5B0%5D%3Bvar%20type%3Dev.type%3Bif(type%3D%3D%3D'touchstart')%7BPOINTERSTATE.touch.x%3Dt.clientX%3BPOINTERSTATE.touch.y%3Dt.clientY%3BPOINTERSTATE.touch.scrollDecided%3Dfalse%3B%7Delse%20if(type%3D%3D%3D'touchmove')%7Bif(POINTERSTATE.touch.scrollDecided)%7Breturn%3B%7DPOINTERSTATE.touch.scrollDecided%3Dtrue%3Bvar%20ta%3DfirstTouchAction(ev)%3Bvar%20prevent%3Dfalse%3Bvar%20dx%3DMath.abs(POINTERSTATE.touch.x-t.clientX)%3Bvar%20dy%3DMath.abs(POINTERSTATE.touch.y-t.clientY)%3Bif(!ev.cancelable)%7B%2F%2F%20scrolling%20is%20happening%0A%7Delse%20if(ta%3D%3D%3D'none')%7Bprevent%3Dtrue%3B%7Delse%20if(ta%3D%3D%3D'pan-x')%7Bprevent%3Ddy%3Edx%3B%7Delse%20if(ta%3D%3D%3D'pan-y')%7Bprevent%3Ddx%3Edy%3B%7Dif(prevent)%7Bev.preventDefault()%3B%7Delse%7BGestures.prevent('track')%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Adds%20an%20event%20listener%20to%20a%20node%20for%20the%20given%20gesture%20type.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20listener%20on%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Gesture%20type%3A%20%60down%60%2C%20%60up%60%2C%20%60track%60%2C%20or%20%60tap%60%0A%20%20%20%20%20*%20%40param%20%7B!function(!Event)%3Avoid%7D%20handler%20Event%20listener%20function%20to%20call%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20a%20gesture%20event%20listener%20was%20added.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2FaddListener%3Afunction%20addListener(node%2CevType%2Chandler)%7Bif(this.gestures%5BevType%5D)%7Bthis._add(node%2CevType%2Chandler)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Removes%20an%20event%20listener%20from%20a%20node%20for%20the%20given%20gesture%20type.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20listener%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Gesture%20type%3A%20%60down%60%2C%20%60up%60%2C%20%60track%60%2C%20or%20%60tap%60%0A%20%20%20%20%20*%20%40param%20%7B!function(!Event)%3Avoid%7D%20handler%20Event%20listener%20function%20previously%20passed%20to%0A%20%20%20%20%20*%20%20%60addListener%60.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20a%20gesture%20event%20listener%20was%20removed.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2FremoveListener%3Afunction%20removeListener(node%2CevType%2Chandler)%7Bif(this.gestures%5BevType%5D)%7Bthis._remove(node%2CevType%2Chandler)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2C%2F**%0A%20%20%20%20%20*%20automate%20the%20event%20listeners%20for%20the%20native%20events%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20node%20Node%20on%20which%20to%20add%20the%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Event%20type%20to%20add.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%7D%20handler%20Event%20handler%20function.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_add%3Afunction%20_add(node%2CevType%2Chandler)%7Bvar%20recognizer%3Dthis.gestures%5BevType%5D%3Bvar%20deps%3Drecognizer.deps%3Bvar%20name%3Drecognizer.name%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(!gobj)%7Bnode%5BGESTURE_KEY%5D%3Dgobj%3D%7B%7D%3B%7Dfor(var%20i%3D0%2Cdep%2Cgd%3Bi%3Cdeps.length%3Bi%2B%2B)%7Bdep%3Ddeps%5Bi%5D%3B%2F%2F%20don't%20add%20mouse%20handlers%20on%20iOS%20because%20they%20cause%20gray%20selection%20overlays%0Aif(IS_TOUCH_ONLY%26%26isMouseEvent(dep)%26%26dep!%3D%3D'click')%7Bcontinue%3B%7Dgd%3Dgobj%5Bdep%5D%3Bif(!gd)%7Bgobj%5Bdep%5D%3Dgd%3D%7B_count%3A0%7D%3B%7Dif(gd._count%3D%3D%3D0)%7Bnode.addEventListener(dep%2Cthis._handleNative%2CPASSIVE_TOUCH(dep))%3B%7Dgd%5Bname%5D%3D(gd%5Bname%5D%7C%7C0)%2B1%3Bgd._count%3D(gd._count%7C%7C0)%2B1%3B%7Dnode.addEventListener(evType%2Chandler)%3Bif(recognizer.touchAction)%7Bthis.setTouchAction(node%2Crecognizer.touchAction)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20automate%20event%20listener%20removal%20for%20native%20events%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20node%20Node%20on%20which%20to%20remove%20the%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evType%20Event%20type%20to%20remove.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(Event%3F)%7D%20handler%20Event%20handler%20function.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_remove%3Afunction%20_remove(node%2CevType%2Chandler)%7Bvar%20recognizer%3Dthis.gestures%5BevType%5D%3Bvar%20deps%3Drecognizer.deps%3Bvar%20name%3Drecognizer.name%3Bvar%20gobj%3Dnode%5BGESTURE_KEY%5D%3Bif(gobj)%7Bfor(var%20i%3D0%2Cdep%2Cgd%3Bi%3Cdeps.length%3Bi%2B%2B)%7Bdep%3Ddeps%5Bi%5D%3Bgd%3Dgobj%5Bdep%5D%3Bif(gd%26%26gd%5Bname%5D)%7Bgd%5Bname%5D%3D(gd%5Bname%5D%7C%7C1)-1%3Bgd._count%3D(gd._count%7C%7C1)-1%3Bif(gd._count%3D%3D%3D0)%7Bnode.removeEventListener(dep%2Cthis._handleNative%2CPASSIVE_TOUCH(dep))%3B%7D%7D%7D%7Dnode.removeEventListener(evType%2Chandler)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Registers%20a%20new%20gesture%20event%20recognizer%20for%20adding%20new%20custom%0A%20%20%20%20%20*%20gesture%20event%20types.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!GestureRecognizer%7D%20recog%20Gesture%20recognizer%20descriptor%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2Fregister%3Afunction%20register(recog)%7Bthis.recognizers.push(recog)%3Bfor(var%20i%3D0%3Bi%3Crecog.emits.length%3Bi%2B%2B)%7Bthis.gestures%5Brecog.emits%5Bi%5D%5D%3Drecog%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evName%20Event%20name.%0A%20%20%20%20%20*%20%40return%20%7BObject%7D%20Returns%20the%20gesture%20for%20the%20given%20event%20name.%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2F_findRecognizerByEvent%3Afunction%20_findRecognizerByEvent(evName)%7Bfor(var%20i%3D0%2Cr%3Bi%3Cthis.recognizers.length%3Bi%2B%2B)%7Br%3Dthis.recognizers%5Bi%5D%3Bfor(var%20j%3D0%2Cn%3Bj%3Cr.emits.length%3Bj%2B%2B)%7Bn%3Dr.emits%5Bj%5D%3Bif(n%3D%3D%3DevName)%7Breturn%20r%3B%7D%7D%7Dreturn%20null%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Sets%20scrolling%20direction%20on%20node.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20value%20is%20checked%20on%20first%20move%2C%20thus%20it%20should%20be%20called%20prior%20to%0A%20%20%20%20%20*%20adding%20event%20listeners.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7B!Element%7D%20node%20Node%20to%20set%20touch%20action%20setting%20on%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Touch%20action%20value%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FsetTouchAction%3Afunction%20setTouchAction(node%2Cvalue)%7Bif(HAS_NATIVE_TA)%7B%2F%2F%20NOTE%3A%20add%20touchAction%20async%20so%20that%20events%20can%20be%20added%20in%0A%2F%2F%20custom%20element%20constructors.%20Otherwise%20we%20run%20afoul%20of%20custom%0A%2F%2F%20elements%20restriction%20against%20settings%20attributes%20(style)%20in%20the%0A%2F%2F%20constructor.%0APolymer.Async.microTask.run(function()%7Bnode.style.touchAction%3Dvalue%3B%7D)%3B%7Dnode%5BTOUCH_ACTION%5D%3Dvalue%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Dispatches%20an%20event%20on%20the%20%60target%60%20element%20of%20%60type%60%20with%20the%20given%0A%20%20%20%20%20*%20%60detail%60.%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%20The%20element%20on%20which%20to%20fire%20an%20event.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20The%20type%20of%20event%20to%20fire.%0A%20%20%20%20%20*%20%40param%20%7B!Object%3D%7D%20detail%20The%20detail%20object%20to%20populate%20on%20the%20event.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(target%2Ctype%2Cdetail)%7Bvar%20ev%3Dnew%20Event(type%2C%7Bbubbles%3Atrue%2Ccancelable%3Atrue%2Ccomposed%3Atrue%7D)%3Bev.detail%3Ddetail%3Btarget.dispatchEvent(ev)%3B%2F%2F%20forward%20%60preventDefault%60%20in%20a%20clean%20way%0Aif(ev.defaultPrevented)%7Bvar%20preventer%3Ddetail.preventer%7C%7Cdetail.sourceEvent%3Bif(preventer%26%26preventer.preventDefault)%7Bpreventer.preventDefault()%3B%7D%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Prevents%20the%20dispatch%20and%20default%20action%20of%20the%20given%20event%20name.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20evName%20Event%20name.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BGestures%7D%0A%20%20%20%20%20*%2Fprevent%3Afunction%20prevent(evName)%7Bvar%20recognizer%3Dthis._findRecognizerByEvent(evName)%3Bif(recognizer.info)%7Brecognizer.info.prevent%3Dtrue%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Reset%20the%202500ms%20timeout%20on%20processing%20mouse%20input%20after%20detecting%20touch%20input.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Touch%20inputs%20create%20synthesized%20mouse%20inputs%20anywhere%20from%200%20to%202000ms%20after%20the%20touch.%0A%20%20%20%20%20*%20This%20method%20should%20only%20be%20called%20during%20testing%20with%20simulated%20touch%20inputs.%0A%20%20%20%20%20*%20Calling%20this%20method%20in%20production%20may%20cause%20duplicate%20taps%20or%20other%20Gestures.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Gestures%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FresetMouseCanceller%3Afunction%20resetMouseCanceller()%7Bif(POINTERSTATE.mouse.mouseIgnoreJob)%7BPOINTERSTATE.mouse.mouseIgnoreJob.flush()%3B%7D%7D%7D%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2FGestures.register(%7Bname%3A'downup'%2Cdeps%3A%5B'mousedown'%2C'touchstart'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'mouseup'%2C'touchend'%5D%7D%2Cemits%3A%5B'down'%2C'up'%5D%2Cinfo%3A%7Bmovefn%3Anull%2Cupfn%3Anull%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7BuntrackDocument(this.info)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(!hasLeftMouseButton(e))%7Breturn%3B%7Dvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20self%3Dthis%3Bvar%20movefn%3Dfunction%20movefn(e)%7Bif(!hasLeftMouseButton(e))%7Bself._fire('up'%2Ct%2Ce)%3BuntrackDocument(self.info)%3B%7D%7D%3Bvar%20upfn%3Dfunction%20upfn(e)%7Bif(hasLeftMouseButton(e))%7Bself._fire('up'%2Ct%2Ce)%3B%7DuntrackDocument(self.info)%3B%7D%3BtrackDocument(this.info%2Cmovefn%2Cupfn)%3Bthis._fire('down'%2Ct%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bthis._fire('down'%2CGestures._findOriginalTarget(e)%2Ce.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bthis._fire('up'%2CGestures._findOriginalTarget(e)%2Ce.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BEvent%7D%20event%0A%20%20%20%20%20*%20%40param%20%7BFunction%7D%20preventer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(type%2Ctarget%2Cevent%2Cpreventer)%7BGestures._fire(target%2Ctype%2C%7Bx%3Aevent.clientX%2Cy%3Aevent.clientY%2CsourceEvent%3Aevent%2Cpreventer%3Apreventer%2Cprevent%3Afunction%20prevent(e)%7Breturn%20Gestures.prevent(e)%3B%7D%7D)%3B%7D%7D)%3BGestures.register(%7Bname%3A'track'%2CtouchAction%3A'none'%2Cdeps%3A%5B'mousedown'%2C'touchstart'%2C'touchmove'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'mouseup'%2C'touchend'%5D%7D%2Cemits%3A%5B'track'%5D%2Cinfo%3A%7Bx%3A0%2Cy%3A0%2Cstate%3A'start'%2Cstarted%3Afalse%2Cmoves%3A%5B%5D%2C%2F**%20%40this%20%7BGestureRecognizer%7D%20*%2FaddMove%3Afunction%20addMove(move)%7Bif(this.moves.length%3ETRACK_LENGTH)%7Bthis.moves.shift()%3B%7Dthis.moves.push(move)%3B%7D%2Cmovefn%3Anull%2Cupfn%3Anull%2Cprevent%3Afalse%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7Bthis.info.state%3D'start'%3Bthis.info.started%3Dfalse%3Bthis.info.moves%3D%5B%5D%3Bthis.info.x%3D0%3Bthis.info.y%3D0%3Bthis.info.prevent%3Dfalse%3BuntrackDocument(this.info)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20x%0A%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20y%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%0A%20%20%20%20%20*%2FhasMovedEnough%3Afunction%20hasMovedEnough(x%2Cy)%7Bif(this.info.prevent)%7Breturn%20false%3B%7Dif(this.info.started)%7Breturn%20true%3B%7Dvar%20dx%3DMath.abs(this.info.x-x)%3Bvar%20dy%3DMath.abs(this.info.y-y)%3Breturn%20dx%3E%3DTRACK_DISTANCE%7C%7Cdy%3E%3DTRACK_DISTANCE%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(!hasLeftMouseButton(e))%7Breturn%3B%7Dvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20self%3Dthis%3Bvar%20movefn%3Dfunction%20movefn(e)%7Bvar%20x%3De.clientX%2Cy%3De.clientY%3Bif(self.hasMovedEnough(x%2Cy))%7B%2F%2F%20first%20move%20is%20'start'%2C%20subsequent%20moves%20are%20'move'%2C%20mouseup%20is%20'end'%0Aself.info.state%3Dself.info.started%3Fe.type%3D%3D%3D'mouseup'%3F'end'%3A'track'%3A'start'%3Bif(self.info.state%3D%3D%3D'start')%7B%2F%2F%20if%20and%20only%20if%20tracking%2C%20always%20prevent%20tap%0AGestures.prevent('tap')%3B%7Dself.info.addMove(%7Bx%3Ax%2Cy%3Ay%7D)%3Bif(!hasLeftMouseButton(e))%7B%2F%2F%20always%20_fire%20%22end%22%0Aself.info.state%3D'end'%3BuntrackDocument(self.info)%3B%7Dself._fire(t%2Ce)%3Bself.info.started%3Dtrue%3B%7D%7D%3Bvar%20upfn%3Dfunction%20upfn(e)%7Bif(self.info.started)%7Bmovefn(e)%3B%7D%2F%2F%20remove%20the%20temporary%20listeners%0AuntrackDocument(self.info)%3B%7D%3B%2F%2F%20add%20temporary%20document%20listeners%20as%20mouse%20retargets%0AtrackDocument(this.info%2Cmovefn%2Cupfn)%3Bthis.info.x%3De.clientX%3Bthis.info.y%3De.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bvar%20ct%3De.changedTouches%5B0%5D%3Bthis.info.x%3Dct.clientX%3Bthis.info.y%3Dct.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchmove%3Afunction%20touchmove(e)%7Bvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20ct%3De.changedTouches%5B0%5D%3Bvar%20x%3Dct.clientX%2Cy%3Dct.clientY%3Bif(this.hasMovedEnough(x%2Cy))%7Bif(this.info.state%3D%3D%3D'start')%7B%2F%2F%20if%20and%20only%20if%20tracking%2C%20always%20prevent%20tap%0AGestures.prevent('tap')%3B%7Dthis.info.addMove(%7Bx%3Ax%2Cy%3Ay%7D)%3Bthis._fire(t%2Cct)%3Bthis.info.state%3D'track'%3Bthis.info.started%3Dtrue%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bvar%20t%3DGestures._findOriginalTarget(e)%3Bvar%20ct%3De.changedTouches%5B0%5D%3B%2F%2F%20only%20trackend%20if%20track%20was%20started%20and%20not%20aborted%0Aif(this.info.started)%7B%2F%2F%20reset%20started%20state%20on%20up%0Athis.info.state%3D'end'%3Bthis.info.addMove(%7Bx%3Act.clientX%2Cy%3Act.clientY%7D)%3Bthis._fire(t%2Cct%2Ce)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7B!EventTarget%7D%20target%0A%20%20%20%20%20*%20%40param%20%7BTouch%7D%20touch%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_fire%3Afunction%20_fire(target%2Ctouch)%7Bvar%20secondlast%3Dthis.info.moves%5Bthis.info.moves.length-2%5D%3Bvar%20lastmove%3Dthis.info.moves%5Bthis.info.moves.length-1%5D%3Bvar%20dx%3Dlastmove.x-this.info.x%3Bvar%20dy%3Dlastmove.y-this.info.y%3Bvar%20ddx%3Dvoid%200%2Cddy%3D0%3Bif(secondlast)%7Bddx%3Dlastmove.x-secondlast.x%3Bddy%3Dlastmove.y-secondlast.y%3B%7DGestures._fire(target%2C'track'%2C%7Bstate%3Athis.info.state%2Cx%3Atouch.clientX%2Cy%3Atouch.clientY%2Cdx%3Adx%2Cdy%3Ady%2Cddx%3Addx%2Cddy%3Addy%2CsourceEvent%3Atouch%2Chover%3Afunction%20hover()%7Breturn%20Gestures.deepTargetFind(touch.clientX%2Ctouch.clientY)%3B%7D%7D)%3B%7D%7D)%3BGestures.register(%7Bname%3A'tap'%2Cdeps%3A%5B'mousedown'%2C'click'%2C'touchstart'%2C'touchend'%5D%2Cflow%3A%7Bstart%3A%5B'mousedown'%2C'touchstart'%5D%2Cend%3A%5B'click'%2C'touchend'%5D%7D%2Cemits%3A%5B'tap'%5D%2Cinfo%3A%7Bx%3ANaN%2Cy%3ANaN%2Cprevent%3Afalse%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Freset%3Afunction%20reset()%7Bthis.info.x%3DNaN%3Bthis.info.y%3DNaN%3Bthis.info.prevent%3Dfalse%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fsave%3Afunction%20save(e)%7Bthis.info.x%3De.clientX%3Bthis.info.y%3De.clientY%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fmousedown%3Afunction%20mousedown(e)%7Bif(hasLeftMouseButton(e))%7Bthis.save(e)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BMouseEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fclick%3Afunction%20click(e)%7Bif(hasLeftMouseButton(e))%7Bthis.forward(e)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchstart%3Afunction%20touchstart(e)%7Bthis.save(e.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BTouchEvent%7D%20e%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Ftouchend%3Afunction%20touchend(e)%7Bthis.forward(e.changedTouches%5B0%5D%2Ce)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40this%20%7BGestureRecognizer%7D%0A%20%20%20%20%20*%20%40param%20%7BEvent%20%7C%20Touch%7D%20e%0A%20%20%20%20%20*%20%40param%20%7BEvent%3D%7D%20preventer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fforward%3Afunction%20forward(e%2Cpreventer)%7Bvar%20dx%3DMath.abs(e.clientX-this.info.x)%3Bvar%20dy%3DMath.abs(e.clientY-this.info.y)%3B%2F%2F%20find%20original%20target%20from%20%60preventer%60%20for%20TouchEvents%2C%20or%20%60e%60%20for%20MouseEvents%0Avar%20t%3DGestures._findOriginalTarget(%2F**%20%40type%20%7BEvent%7D%20*%2Fpreventer%7C%7Ce)%3Bif(!t%7C%7CcanBeDisabled%5B%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Ft.localName%5D%26%26t.hasAttribute('disabled'))%7Breturn%3B%7D%2F%2F%20dx%2Cdy%20can%20be%20NaN%20if%20%60click%60%20has%20been%20simulated%20and%20there%20was%20no%20%60down%60%20for%20%60start%60%0Aif(isNaN(dx)%7C%7CisNaN(dy)%7C%7Cdx%3C%3DTAP_DISTANCE%26%26dy%3C%3DTAP_DISTANCE%7C%7CisSyntheticClick(e))%7B%2F%2F%20prevent%20taps%20from%20being%20generated%20if%20an%20event%20has%20canceled%20them%0Aif(!this.info.prevent)%7BGestures._fire(t%2C'tap'%2C%7Bx%3Ae.clientX%2Cy%3Ae.clientY%2CsourceEvent%3Ae%2Cpreventer%3Apreventer%7D)%3B%7D%7D%7D%7D)%3B%2F*%20eslint-enable%20valid-jsdoc%20*%2F%2F**%20%40deprecated%20*%2FGestures.findOriginalTarget%3DGestures._findOriginalTarget%3B%2F**%20%40deprecated%20*%2FGestures.add%3DGestures.addListener%3B%2F**%20%40deprecated%20*%2FGestures.remove%3DGestures.removeListener%3BPolymer.Gestures%3DGestures%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fgestures.html.js%0A",
            "totalBytes": 26851,
            "wastedBytes": 12769,
            "wastedPercent": 47.55502588357976
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7B!AsyncInterface%7D%20*%2Fvar%20microtask%3DPolymer.Async.microTask%3B%2F**%0A%20%20%20%20%20*%20Element%20class%20mixin%20that%20provides%20basic%20meta-programming%20for%20creating%20one%0A%20%20%20%20%20*%20or%20more%20property%20accessors%20(getter%2Fsetter%20pair)%20that%20enqueue%20an%20async%0A%20%20%20%20%20*%20(batched)%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20For%20basic%20usage%20of%20this%20mixin%2C%20call%20%60MyClass.createProperties(props)%60%0A%20%20%20%20%20*%20once%20at%20class%20definition%20time%20to%20create%20property%20accessors%20for%20properties%0A%20%20%20%20%20*%20named%20in%20props%2C%20implement%20%60_propertiesChanged%60%20to%20react%20as%20desired%20to%0A%20%20%20%20%20*%20property%20changes%2C%20and%20implement%20%60static%20get%20observedAttributes()%60%20and%0A%20%20%20%20%20*%20include%20lowercase%20versions%20of%20any%20property%20names%20that%20should%20be%20set%20from%0A%20%20%20%20%20*%20attributes.%20Last%2C%20call%20%60this._enableProperties()%60%20in%20the%20element's%0A%20%20%20%20%20*%20%60connectedCallback%60%20to%20enable%20the%20accessors.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40mixinFunction%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40summary%20Element%20class%20mixin%20for%20reacting%20to%20property%20changes%20from%0A%20%20%20%20%20*%20%20%20generated%20property%20accessors.%0A%20%20%20%20%20*%2FPolymer.PropertiesChanged%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20%20%20*%2Fvar%20PropertiesChanged%3Dfunction(_superClass)%7B_inherits(PropertiesChanged%2C_superClass)%3B_createClass(PropertiesChanged%2C%5B%7Bkey%3A'_createPropertyAccessor'%2C%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20Creates%20a%20setter%2Fgetter%20pair%20for%20the%20named%20property%20with%20its%20own%0A%20%20%20%20%20%20%20%20%20*%20local%20storage.%20%20The%20getter%20returns%20the%20value%20in%20the%20local%20storage%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20the%20setter%20calls%20%60_setProperty%60%2C%20which%20updates%20the%20local%20storage%0A%20%20%20%20%20%20%20%20%20*%20for%20the%20property%20and%20enqueues%20a%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20a%20prototype%20or%20an%20instance.%20%20Calling%0A%20%20%20%20%20%20%20%20%20*%20this%20method%20may%20overwrite%20a%20property%20value%20that%20already%20exists%20on%0A%20%20%20%20%20%20%20%20%20*%20the%20prototype%2Finstance%20by%20creating%20the%20accessor.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%3B%20the%0A%20%20%20%20%20%20%20%20%20*%20%20%20protected%20%60_setProperty%60%20function%20must%20be%20used%20to%20set%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_createPropertyAccessor(property%2CreadOnly)%7Bthis._addPropertyToAttributeMap(property)%3Bif(!this.hasOwnProperty('__dataHasAccessor'))%7Bthis.__dataHasAccessor%3DObject.assign(%7B%7D%2Cthis.__dataHasAccessor)%3B%7Dif(!this.__dataHasAccessor%5Bproperty%5D)%7Bthis.__dataHasAccessor%5Bproperty%5D%3Dtrue%3Bthis._definePropertyAccessor(property%2CreadOnly)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Adds%20the%20given%20%60property%60%20to%20a%20map%20matching%20attribute%20names%0A%20%20%20%20%20%20%20%20%20*%20to%20property%20names%2C%20using%20%60attributeNameForProperty%60.%20This%20map%20is%0A%20%20%20%20%20%20%20%20%20*%20used%20when%20deserializing%20attribute%20values%20to%20properties.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyToAttributeMap'%2Cvalue%3Afunction%20_addPropertyToAttributeMap(property)%7Bif(!this.hasOwnProperty('__dataAttributes'))%7Bthis.__dataAttributes%3DObject.assign(%7B%7D%2Cthis.__dataAttributes)%3B%7Dif(!this.__dataAttributes%5Bproperty%5D)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bthis.__dataAttributes%5Battr%5D%3Dproperty%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Defines%20a%20property%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_definePropertyAccessor'%2Cvalue%3Afunction%20_definePropertyAccessor(property%2CreadOnly)%7BObject.defineProperty(this%2Cproperty%2C%7B%2F*%20eslint-disable%20valid-jsdoc%20*%2F%2F**%20%40this%20%7BPropertiesChanged%7D%20*%2Fget%3Afunction%20get()%7Breturn%20this._getProperty(property)%3B%7D%2C%2F**%20%40this%20%7BPropertiesChanged%7D%20*%2Fset%3AreadOnly%3Ffunction()%7B%7D%3Afunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%2F*%20eslint-enable%20*%2F%7D)%3B%7D%7D%5D%2C%5B%7Bkey%3A'createProperties'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20Creates%20property%20accessors%20for%20the%20given%20property%20names.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20props%20Object%20whose%20keys%20are%20names%20of%20accessors.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20createProperties(props)%7Bvar%20proto%3Dthis.prototype%3Bfor(var%20prop%20in%20props)%7B%2F%2F%20don't%20stomp%20an%20existing%20accessor%0Aif(!(prop%20in%20proto))%7Bproto._createPropertyAccessor(prop)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Returns%20an%20attribute%20name%20that%20corresponds%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20The%20attribute%20name%20is%20the%20lowercased%20property%20name.%20Override%20to%0A%20%20%20%20%20%20%20%20%20*%20customize%20this%20mapping.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20to%20convert%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Attribute%20name%20corresponding%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeNameForProperty'%2Cvalue%3Afunction%20attributeNameForProperty(property)%7Breturn%20property.toLowerCase()%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Override%20point%20to%20provide%20a%20type%20to%20which%20to%20deserialize%20a%20value%20to%0A%20%20%20%20%20%20%20%20%20*%20a%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20property%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'typeForProperty'%2Cvalue%3Afunction%20typeForProperty(name)%7B%7D%7D%5D)%3Bfunction%20PropertiesChanged()%7B_classCallCheck(this%2CPropertiesChanged)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(PropertiesChanged.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged)).call(this))%3B_this.__dataEnabled%3Dfalse%3B_this.__dataReady%3Dfalse%3B_this.__dataInvalid%3Dfalse%3B_this.__data%3D%7B%7D%3B_this.__dataPending%3Dnull%3B_this.__dataOld%3Dnull%3B_this.__dataInstanceProps%3Dnull%3B_this.__serializing%3Dfalse%3B_this._initializeProperties()%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Lifecycle%20callback%20called%20when%20properties%20are%20enabled%20via%0A%20%20%20%20%20%20%20%20%20*%20%60_enableProperties%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20function%20to%20implement%20behavior%20that%20is%0A%20%20%20%20%20%20%20%20%20*%20dependent%20on%20the%20element%20having%20its%20property%20data%20initialized%2C%20e.g.%0A%20%20%20%20%20%20%20%20%20*%20from%20defaults%20(initialized%20from%20%60constructor%60%2C%20%60_initializeProperties%60)%2C%0A%20%20%20%20%20%20%20%20%20*%20%60attributeChangedCallback%60%2C%20or%20values%20propagated%20from%20host%20e.g.%20via%0A%20%20%20%20%20%20%20%20%20*%20bindings.%20%20%60super.ready()%60%20must%20be%20called%20to%20ensure%20the%20data%20system%0A%20%20%20%20%20%20%20%20%20*%20becomes%20enabled.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20%20%20*%2F_createClass(PropertiesChanged%2C%5B%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7Bthis.__dataReady%3Dtrue%3Bthis._flushProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Initializes%20the%20local%20storage%20for%20property%20accessors.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Provided%20as%20an%20override%20point%20for%20performing%20any%20setup%20work%20prior%0A%20%20%20%20%20%20%20%20%20*%20to%20initializing%20the%20property%20accessor%20system.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProperties'%2Cvalue%3Afunction%20_initializeProperties()%7B%2F%2F%20Capture%20instance%20properties%3B%20these%20will%20be%20set%20into%20accessors%0A%2F%2F%20during%20first%20flush.%20Don't%20set%20them%20here%2C%20since%20we%20want%0A%2F%2F%20these%20to%20overwrite%20defaults%2Fconstructor%20assignments%0Afor(var%20p%20in%20this.__dataHasAccessor)%7Bif(this.hasOwnProperty(p))%7Bthis.__dataInstanceProps%3Dthis.__dataInstanceProps%7C%7C%7B%7D%3Bthis.__dataInstanceProps%5Bp%5D%3Dthis%5Bp%5D%3Bdelete%20this%5Bp%5D%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Called%20at%20ready%20time%20with%20bag%20of%20instance%20properties%20that%20overwrote%0A%20%20%20%20%20%20%20%20%20*%20accessors%20when%20the%20element%20upgraded.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20The%20default%20implementation%20sets%20these%20properties%20back%20into%20the%0A%20%20%20%20%20%20%20%20%20*%20setter%20at%20ready%20time.%20%20This%20method%20is%20provided%20as%20an%20override%0A%20%20%20%20%20%20%20%20%20*%20point%20for%20customizing%20or%20providing%20more%20efficient%20initialization.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20property%20values%20that%20were%20overwritten%0A%20%20%20%20%20%20%20%20%20*%20%20%20when%20creating%20property%20accessors.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7BObject.assign(this%2Cprops)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Updates%20the%20local%20storage%20for%20a%20property%20(via%20%60_setPendingProperty%60)%0A%20%20%20%20%20%20%20%20%20*%20and%20enqueues%20a%20%60_proeprtiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Returns%20the%20value%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20for%20the%20given%20property%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_getProperty'%2Cvalue%3Afunction%20_getProperty(property)%7Breturn%20this.__data%5Bproperty%5D%3B%7D%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20Updates%20the%20local%20storage%20for%20a%20property%2C%20records%20the%20previous%20value%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20adds%20it%20to%20the%20set%20of%20%22pending%20changes%22%20that%20will%20be%20passed%20to%20the%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%20%20This%20method%20does%20not%20enqueue%20the%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20ext%20Not%20used%20here%3B%20affordance%20for%20closure%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2Cext)%7Bvar%20old%3Dthis.__data%5Bproperty%5D%3Bvar%20changed%3Dthis._shouldPropertyChange(property%2Cvalue%2Cold)%3Bif(changed)%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(this.__dataOld%26%26!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dold%3B%7Dthis.__data%5Bproperty%5D%3Dvalue%3Bthis.__dataPending%5Bproperty%5D%3Dvalue%3B%7Dreturn%20changed%3B%7D%2F*%20eslint-enable%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20Marks%20the%20properties%20as%20invalid%2C%20and%20enqueues%20an%20async%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20callback.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bvar%20_this2%3Dthis%3Bif(!this.__dataInvalid%26%26this.__dataReady)%7Bthis.__dataInvalid%3Dtrue%3Bmicrotask.run(function()%7Bif(_this2.__dataInvalid)%7B_this2.__dataInvalid%3Dfalse%3B_this2._flushProperties()%3B%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Call%20to%20enable%20property%20accessor%20processing.%20Before%20this%20method%20is%0A%20%20%20%20%20%20%20%20%20*%20called%20accessor%20values%20will%20be%20set%20but%20side%20effects%20are%0A%20%20%20%20%20%20%20%20%20*%20queued.%20When%20called%2C%20any%20pending%20side%20effects%20occur%20immediately.%0A%20%20%20%20%20%20%20%20%20*%20For%20elements%2C%20generally%20%60connectedCallback%60%20is%20a%20normal%20spot%20to%20do%20so.%0A%20%20%20%20%20%20%20%20%20*%20It%20is%20safe%20to%20call%20this%20method%20multiple%20times%20as%20it%20only%20turns%20on%0A%20%20%20%20%20%20%20%20%20*%20property%20accessors%20once.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enableProperties'%2Cvalue%3Afunction%20_enableProperties()%7Bif(!this.__dataEnabled)%7Bthis.__dataEnabled%3Dtrue%3Bif(this.__dataInstanceProps)%7Bthis._initializeInstanceProperties(this.__dataInstanceProps)%3Bthis.__dataInstanceProps%3Dnull%3B%7Dthis.ready()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Calls%20the%20%60_propertiesChanged%60%20callback%20with%20the%20current%20set%20of%0A%20%20%20%20%20%20%20%20%20*%20pending%20changes%20(and%20old%20values%20recorded%20when%20pending%20changes%20were%0A%20%20%20%20%20%20%20%20%20*%20set)%2C%20and%20resets%20the%20pending%20set%20of%20changes.%20Generally%2C%20this%20method%0A%20%20%20%20%20%20%20%20%20*%20should%20not%20be%20called%20in%20user%20code.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bvar%20props%3Dthis.__data%3Bvar%20changedProps%3Dthis.__dataPending%3Bvar%20old%3Dthis.__dataOld%3Bif(this._shouldPropertiesChange(props%2CchangedProps%2Cold))%7Bthis.__dataPending%3Dnull%3Bthis.__dataOld%3Dnull%3Bthis._propertiesChanged(props%2CchangedProps%2Cold)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Called%20in%20%60_flushProperties%60%20to%20determine%20if%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20should%20be%20called.%20The%20default%20implementation%20returns%20true%20if%0A%20%20%20%20%20%20%20%20%20*%20properties%20are%20pending.%20Override%20to%20customize%20when%0A%20%20%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20is%20called.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20true%20if%20changedProps%20is%20truthy%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_shouldPropertiesChange'%2Cvalue%3Afunction%20_shouldPropertiesChange(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20eslint-disable-line%20no-unused-vars%0Areturn%20Boolean(changedProps)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Callback%20called%20when%20any%20properties%20with%20accessors%20created%20via%0A%20%20%20%20%20%20%20%20%20*%20%60_createPropertyAccessor%60%20have%20been%20set.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%7D%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20Method%20called%20to%20determine%20whether%20a%20property%20value%20should%20be%0A%20%20%20%20%20%20%20%20%20*%20considered%20as%20a%20change%20and%20cause%20the%20%60_propertiesChanged%60%20callback%0A%20%20%20%20%20%20%20%20%20*%20to%20be%20enqueued.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20The%20default%20implementation%20returns%20%60true%60%20if%20a%20strict%20equality%0A%20%20%20%20%20%20%20%20%20*%20check%20fails.%20The%20method%20always%20returns%20false%20for%20%60NaN%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20Override%20this%20method%20to%20e.g.%20provide%20stricter%20checking%20for%0A%20%20%20%20%20%20%20%20%20*%20Objects%2FArrays%20when%20using%20immutable%20patterns.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20%20%20*%20%20%20and%20enqueue%20a%20%60_proeprtiesChanged%60%20callback%0A%20%20%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_shouldPropertyChange'%2Cvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn(%2F%2F%20Strict%20equality%20check%0Aold!%3D%3Dvalue%26%26(%2F%2F%20This%20ensures%20(old%3D%3DNaN%2C%20value%3D%3DNaN)%20always%20returns%20false%0Aold%3D%3D%3Dold%7C%7Cvalue%3D%3D%3Dvalue))%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Implements%20native%20Custom%20Elements%20%60attributeChangedCallback%60%20to%0A%20%20%20%20%20%20%20%20%20*%20set%20an%20attribute%20value%20to%20a%20property%20via%20%60_attributeToProperty%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute%20that%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20New%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChangedCallback'%2Cvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7Bthis._attributeToProperty(name%2Cvalue)%3B%7Dif(_get(PropertiesChanged.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged.prototype)%2C'attributeChangedCallback'%2Cthis))%7B_get(PropertiesChanged.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesChanged.prototype)%2C'attributeChangedCallback'%2Cthis).call(this%2Cname%2Cold%2Cvalue%2Cnamespace)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Deserializes%20an%20attribute%20to%20its%20associated%20property.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20calls%20the%20%60_deserializeValue%60%20method%20to%20convert%20the%20string%20to%0A%20%20%20%20%20%20%20%20%20*%20a%20typed%20value.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Name%20of%20attribute%20to%20deserialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20of%20the%20attribute.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20type%20to%20deserialize%20to%2C%20defaults%20to%20the%20value%0A%20%20%20%20%20%20%20%20%20*%20returned%20from%20%60typeForProperty%60%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_attributeToProperty'%2Cvalue%3Afunction%20_attributeToProperty(attribute%2Cvalue%2Ctype)%7Bif(!this.__serializing)%7Bvar%20map%3Dthis.__dataAttributes%3Bvar%20property%3Dmap%26%26map%5Battribute%5D%7C%7Cattribute%3Bthis%5Bproperty%5D%3Dthis._deserializeValue(value%2Ctype%7C%7Cthis.constructor.typeForProperty(property))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Serializes%20a%20property%20to%20its%20associated%20attribute.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20can't%20figure%20out%20%60this%60%20is%20an%20element.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%20to%20reflect.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20attribute%20Attribute%20name%20to%20reflect%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Property%20value%20to%20refect.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertyToAttribute'%2Cvalue%3Afunction%20_propertyToAttribute(property%2Cattribute%2Cvalue)%7Bthis.__serializing%3Dtrue%3Bvalue%3Darguments.length%3C3%3Fthis%5Bproperty%5D%3Avalue%3Bthis._valueToNodeAttribute(%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%2Cvalue%2Cattribute%7C%7Cthis.constructor.attributeNameForProperty(property))%3Bthis.__serializing%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Sets%20a%20typed%20value%20to%20an%20HTML%20attribute%20on%20a%20node.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20calls%20the%20%60_serializeValue%60%20method%20to%20convert%20the%20typed%0A%20%20%20%20%20%20%20%20%20*%20value%20to%20a%20string.%20%20If%20the%20%60_serializeValue%60%20method%20returns%20%60undefined%60%2C%0A%20%20%20%20%20%20%20%20%20*%20the%20attribute%20will%20be%20removed%20(this%20is%20the%20default%20for%20boolean%0A%20%20%20%20%20%20%20%20%20*%20type%20%60false%60).%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Element%20to%20set%20attribute%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20serialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Attribute%20name%20to%20serialize%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_valueToNodeAttribute'%2Cvalue%3Afunction%20_valueToNodeAttribute(node%2Cvalue%2Cattribute)%7Bvar%20str%3Dthis._serializeValue(value)%3Bif(str%3D%3D%3Dundefined)%7Bnode.removeAttribute(attribute)%3B%7Delse%7Bnode.setAttribute(attribute%2Cstr)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Converts%20a%20typed%20JavaScript%20value%20to%20a%20string.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20is%20called%20when%20setting%20JS%20property%20values%20to%0A%20%20%20%20%20%20%20%20%20*%20HTML%20attributes.%20%20Users%20may%20override%20this%20method%20to%20provide%0A%20%20%20%20%20%20%20%20%20*%20serialization%20for%20custom%20types.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Property%20value%20to%20serialize.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20String%20serialized%20from%20the%20provided%0A%20%20%20%20%20%20%20%20%20*%20property%20%20value.%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_serializeValue'%2Cvalue%3Afunction%20_serializeValue(value)%7Bswitch(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%7Bcase'boolean'%3Areturn%20value%3F''%3Aundefined%3Bdefault%3Areturn%20value!%3Dnull%3Fvalue.toString()%3Aundefined%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20This%20method%20is%20called%20when%20reading%20HTML%20attribute%20values%20to%0A%20%20%20%20%20%20%20%20%20*%20JS%20properties.%20%20Users%20may%20override%20this%20method%20to%20provide%0A%20%20%20%20%20%20%20%20%20*%20deserialization%20for%20custom%20%60type%60s.%20Types%20for%20%60Boolean%60%2C%20%60String%60%2C%0A%20%20%20%20%20%20%20%20%20*%20and%20%60Number%60%20convert%20attributes%20to%20the%20expected%20types.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Value%20to%20deserialize.%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20Type%20to%20deserialize%20the%20string%20to.%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Typed%20value%20deserialized%20from%20the%20provided%20string.%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_deserializeValue'%2Cvalue%3Afunction%20_deserializeValue(value%2Ctype)%7Bswitch(type)%7Bcase%20Boolean%3Areturn%20value!%3D%3Dnull%3Bcase%20Number%3Areturn%20Number(value)%3Bdefault%3Areturn%20value%3B%7D%7D%7D%5D)%3Breturn%20PropertiesChanged%3B%7D(superClass)%3Breturn%20PropertiesChanged%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperties-changed.html.js%0A",
            "totalBytes": 20501,
            "wastedBytes": 12611,
            "wastedPercent": 61.51407248426906
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20walker%3Ddocument.createTreeWalker(document%2CNodeFilter.SHOW_ALL%2Cnull%2Cfalse)%3B%2F%2F%201.x%20backwards-compatible%20auto-wrapper%20for%20template%20type%20extensions%0A%2F%2F%20This%20is%20a%20clear%20layering%20violation%20and%20gives%20favored-nation%20status%20to%0A%2F%2F%20dom-if%20and%20dom-repeat%20templates.%20%20This%20is%20a%20conceit%20we're%20choosing%20to%20keep%0A%2F%2F%20a.)%20to%20ease%201.x%20backwards-compatibility%20due%20to%20loss%20of%20%60is%60%2C%20and%0A%2F%2F%20b.)%20to%20maintain%20if%2Frepeat%20capability%20in%20parser-constrained%20elements%0A%2F%2F%20%20%20%20%20(e.g.%20table%2C%20select)%20in%20lieu%20of%20native%20CE%20type%20extensions%20without%0A%2F%2F%20%20%20%20%20massive%20new%20invention%20in%20this%20space%20(e.g.%20directive%20system)%0Avar%20templateExtensions%3D%7B'dom-if'%3Atrue%2C'dom-repeat'%3Atrue%7D%3Bfunction%20wrapTemplateExtension(node)%7Bvar%20is%3Dnode.getAttribute('is')%3Bif(is%26%26templateExtensions%5Bis%5D)%7Bvar%20t%3Dnode%3Bt.removeAttribute('is')%3Bnode%3Dt.ownerDocument.createElement(is)%3Bt.parentNode.replaceChild(node%2Ct)%3Bnode.appendChild(t)%3Bwhile(t.attributes.length)%7Bnode.setAttribute(t.attributes%5B0%5D.name%2Ct.attributes%5B0%5D.value)%3Bt.removeAttribute(t.attributes%5B0%5D.name)%3B%7D%7Dreturn%20node%3B%7Dfunction%20findTemplateNode(root%2CnodeInfo)%7B%2F%2F%20recursively%20ascend%20tree%20until%20we%20hit%20root%0Avar%20parent%3DnodeInfo.parentInfo%26%26findTemplateNode(root%2CnodeInfo.parentInfo)%3B%2F%2F%20unwind%20the%20stack%2C%20returning%20the%20indexed%20node%20at%20each%20level%0Aif(parent)%7B%2F%2F%20note%3A%20marginally%20faster%20than%20indexing%20via%20childNodes%0A%2F%2F%20(http%3A%2F%2Fjsperf.com%2Fchildnodes-lookup)%0Awalker.currentNode%3Dparent%3Bfor(var%20n%3Dwalker.firstChild()%2Ci%3D0%3Bn%3Bn%3Dwalker.nextSibling())%7Bif(nodeInfo.parentIndex%3D%3D%3Di%2B%2B)%7Breturn%20n%3B%7D%7D%7Delse%7Breturn%20root%3B%7D%7D%2F%2F%20construct%20%60%24%60%20map%20(from%20id%20annotations)%0Afunction%20applyIdToMap(inst%2Cmap%2Cnode%2CnodeInfo)%7Bif(nodeInfo.id)%7Bmap%5BnodeInfo.id%5D%3Dnode%3B%7D%7D%2F%2F%20install%20event%20listeners%20(from%20event%20annotations)%0Afunction%20applyEventListener(inst%2Cnode%2CnodeInfo)%7Bif(nodeInfo.events%26%26nodeInfo.events.length)%7Bfor(var%20j%3D0%2Ce%24%3DnodeInfo.events%2Ce%3Bj%3Ce%24.length%26%26(e%3De%24%5Bj%5D)%3Bj%2B%2B)%7Binst._addMethodEventListenerToNode(node%2Ce.name%2Ce.value%2Cinst)%3B%7D%7D%7D%2F%2F%20push%20configuration%20references%20at%20configure%20time%0Afunction%20applyTemplateContent(inst%2Cnode%2CnodeInfo)%7Bif(nodeInfo.templateInfo)%7Bnode._templateInfo%3DnodeInfo.templateInfo%3B%7D%7Dfunction%20createNodeEventHandler(context%2CeventName%2CmethodName)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Acontext%3Dcontext._methodHost%7C%7Ccontext%3Bvar%20handler%3Dfunction%20handler(e)%7Bif(context%5BmethodName%5D)%7Bcontext%5BmethodName%5D(e%2Ce.detail)%3B%7Delse%7Bconsole.warn('listener%20method%20%60'%2BmethodName%2B'%60%20not%20defined')%3B%7D%7D%3Breturn%20handler%3B%7D%2F**%0A%20%20%20*%20Element%20mixin%20that%20provides%20basic%20template%20parsing%20and%20stamping%2C%20including%0A%20%20%20*%20the%20following%20template-related%20features%20for%20stamped%20templates%3A%0A%20%20%20*%0A%20%20%20*%20-%20Declarative%20event%20listeners%20(%60on-eventname%3D%22listener%22%60)%0A%20%20%20*%20-%20Map%20of%20node%20id's%20to%20stamped%20node%20instances%20(%60this.%24.id%60)%0A%20%20%20*%20-%20Nested%20template%20content%20caching%2Fremoval%20and%20re-installation%20(performance%0A%20%20%20*%20%20%20optimization)%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20basic%20template%20parsing%20and%20stamping%0A%20%20%20*%2FPolymer.TemplateStamp%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%2Fvar%20TemplateStamp%3Dfunction(_superClass)%7B_inherits(TemplateStamp%2C_superClass)%3Bfunction%20TemplateStamp()%7B_classCallCheck(this%2CTemplateStamp)%3Breturn%20_possibleConstructorReturn(this%2C(TemplateStamp.__proto__%7C%7CObject.getPrototypeOf(TemplateStamp)).apply(this%2Carguments))%3B%7D_createClass(TemplateStamp%2C%5B%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Clones%20the%20provided%20template%20content%20and%20returns%20a%20document%20fragment%0A%20%20%20%20%20%20%20*%20containing%20the%20cloned%20dom.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20template%20is%20parsed%20(once%20and%20memoized)%20using%20this%20library's%0A%20%20%20%20%20%20%20*%20template%20parsing%20features%2C%20and%20provides%20the%20following%20value-added%0A%20%20%20%20%20%20%20*%20features%3A%0A%20%20%20%20%20%20%20*%20*%20Adds%20declarative%20event%20listeners%20for%20%60on-event%3D%22handler%22%60%20attributes%0A%20%20%20%20%20%20%20*%20*%20Generates%20an%20%22id%20map%22%20for%20all%20nodes%20with%20id's%20under%20%60%24%60%20on%20returned%0A%20%20%20%20%20%20%20*%20%20%20document%20fragment%0A%20%20%20%20%20%20%20*%20*%20Passes%20template%20info%20including%20%60content%60%20back%20to%20templates%20as%0A%20%20%20%20%20%20%20*%20%20%20%60_templateInfo%60%20(a%20performance%20optimization%20to%20avoid%20deep%20template%0A%20%20%20%20%20%20%20*%20%20%20cloning)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20the%20memoized%20template%20parsing%20process%20is%20destructive%20to%20the%0A%20%20%20%20%20%20%20*%20template%3A%20attributes%20for%20bindings%20and%20declarative%20event%20listeners%20are%0A%20%20%20%20%20%20%20*%20removed%20after%20being%20noted%20in%20notes%2C%20and%20any%20nested%20%60%3Ctemplate%3E.content%60%0A%20%20%20%20%20%20%20*%20is%20removed%20and%20stored%20in%20notes%20as%20well.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Polyfill%20support%3A%20bootstrap%20the%20template%20if%20it%20has%20not%20already%20been%0Aif(template%26%26!template.content%26%26window.HTMLTemplateElement%26%26HTMLTemplateElement.decorate)%7BHTMLTemplateElement.decorate(template)%3B%7Dvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20nodeInfo%3DtemplateInfo.nodeInfoList%3Bvar%20content%3DtemplateInfo.content%7C%7Ctemplate.content%3Bvar%20dom%3D%2F**%20%40type%20%7BDocumentFragment%7D%20*%2Fdocument.importNode(content%2Ctrue)%3B%2F%2F%20NOTE%3A%20ShadyDom%20optimization%20indicating%20there%20is%20an%20insertion%20point%0Adom.__noInsertionPoint%3D!templateInfo.hasInsertionPoint%3Bvar%20nodes%3Ddom.nodeList%3Dnew%20Array(nodeInfo.length)%3Bdom.%24%3D%7B%7D%3Bfor(var%20i%3D0%2Cl%3DnodeInfo.length%2Cinfo%3Bi%3Cl%26%26(info%3DnodeInfo%5Bi%5D)%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3DfindTemplateNode(dom%2Cinfo)%3BapplyIdToMap(this%2Cdom.%24%2Cnode%2Cinfo)%3BapplyTemplateContent(this%2Cnode%2Cinfo)%3BapplyEventListener(this%2Cnode%2Cinfo)%3B%7Ddom%3D%2F**%20%40type%20%7B!StampedTemplate%7D%20*%2Fdom%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20an%20event%20listener%20by%20method%20name%20for%20the%20event%20provided.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20generates%20a%20handler%20function%20that%20looks%20up%20the%20method%0A%20%20%20%20%20%20%20*%20name%20at%20handling%20time.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20listener%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20methodName%20Name%20of%20method%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20context%20Context%20the%20method%20will%20be%20called%20on%20(defaults%0A%20%20%20%20%20%20%20*%20%20%20to%20%60node%60)%0A%20%20%20%20%20%20%20*%20%40return%20%7BFunction%7D%20Generated%20handler%20function%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addMethodEventListenerToNode'%2Cvalue%3Afunction%20_addMethodEventListenerToNode(node%2CeventName%2CmethodName%2Ccontext)%7Bcontext%3Dcontext%7C%7Cnode%3Bvar%20handler%3DcreateNodeEventHandler(context%2CeventName%2CmethodName)%3Bthis._addEventListenerToNode(node%2CeventName%2Chandler)%3Breturn%20handler%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20add%20event%20listener%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20add%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addEventListenerToNode'%2Cvalue%3Afunction%20_addEventListenerToNode(node%2CeventName%2Chandler)%7Bnode.addEventListener(eventName%2Chandler)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Override%20point%20for%20adding%20custom%20or%20simulated%20event%20handling.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20remove%20event%20listener%20from%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20Name%20of%20event%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!Event)%3Avoid%7D%20handler%20Listener%20function%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeEventListenerFromNode'%2Cvalue%3Afunction%20_removeEventListenerFromNode(node%2CeventName%2Chandler)%7Bnode.removeEventListener(eventName%2Chandler)%3B%7D%7D%5D%2C%5B%7Bkey%3A'_parseTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Scans%20a%20template%20to%20produce%20template%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Template-specific%20metadata%20are%20stored%20in%20the%20object%20returned%2C%20and%20node-%0A%20%20%20%20%20%20%20*%20specific%20metadata%20are%20stored%20in%20objects%20in%20its%20flattened%20%60nodeInfoList%60%0A%20%20%20%20%20%20%20*%20array.%20%20Only%20nodes%20in%20the%20template%20that%20were%20parsed%20as%20nodes%20of%0A%20%20%20%20%20%20%20*%20interest%20contain%20an%20object%20in%20%60nodeInfoList%60.%20%20Each%20%60nodeInfo%60%20object%0A%20%20%20%20%20%20%20*%20contains%20an%20%60index%60%20(%60childNodes%60%20index%20in%20parent)%20and%20optionally%0A%20%20%20%20%20%20%20*%20%60parent%60%2C%20which%20points%20to%20node%20info%20of%20its%20parent%20(including%20its%20index).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20template%20metadata%20object%20returned%20from%20this%20method%20has%20the%20following%0A%20%20%20%20%20%20%20*%20structure%20(many%20fields%20optional)%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60js%0A%20%20%20%20%20%20%20*%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Flattened%20list%20of%20node%20metadata%20(for%20nodes%20that%20generated%20metadata)%0A%20%20%20%20%20%20%20*%20%20%20%20%20nodeInfoList%3A%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20%60id%60%20attribute%20for%20any%20nodes%20with%20id's%20for%20generating%20%60%24%60%20map%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20id%3A%20%7Bstring%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20%60on-event%3D%22handler%22%60%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20events%3A%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20name%3A%20%7Bstring%7D%2C%20%20%20%2F%2F%20event%20name%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%20value%3A%20%7Bstring%7D%2C%20%20%2F%2F%20handler%20method%20name%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20Notes%20when%20the%20template%20contained%20a%20%60%3Cslot%3E%60%20for%20shady%20DOM%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20optimization%20purposes%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20hasInsertionPoint%3A%20%7Bboolean%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20For%20nested%20%60%3Ctemplate%3E%60%60%20nodes%2C%20nested%20template%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20templateInfo%3A%20%7Bobject%7D%2C%20%2F%2F%20nested%20template%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20Metadata%20to%20allow%20efficient%20retrieval%20of%20instanced%20node%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%2F%2F%20corresponding%20to%20this%20metadata%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20parentInfo%3A%20%7Bnumber%7D%2C%20%20%20%2F%2F%20reference%20to%20parent%20nodeInfo%3E%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20parentIndex%3A%20%7Bnumber%7D%2C%20%20%2F%2F%20index%20in%20parent's%20%60childNodes%60%20collection%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20infoIndex%3A%20%7Bnumber%7D%2C%20%20%20%20%2F%2F%20index%20of%20this%20%60nodeInfo%60%20in%20%60templateInfo.nodeInfoList%60%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20When%20true%2C%20the%20template%20had%20the%20%60strip-whitespace%60%20attribute%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20or%20was%20nested%20in%20a%20template%20with%20that%20setting%0A%20%20%20%20%20%20%20*%20%20%20%20%20stripWhitespace%3A%20%7Bboolean%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20For%20nested%20templates%2C%20nested%20template%20content%20is%20moved%20into%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20a%20document%20fragment%20stored%20here%3B%20this%20is%20an%20optimization%20to%0A%20%20%20%20%20%20%20*%20%20%20%20%20%2F%2F%20avoid%20the%20cost%20of%20nested%20template%20cloning%0A%20%20%20%20%20%20%20*%20%20%20%20%20content%3A%20%7BDocumentFragment%7D%0A%20%20%20%20%20%20%20*%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20kicks%20off%20a%20recursive%20treewalk%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%20%20%20%20_parseTemplate%20%3C---------------------%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20_parseTemplateContent%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20_parseTemplateNode%20%20%3C------------%7C--%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateNestedTemplate%20--%2B%20%20%7C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateChildNodes%20---------%2B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20_parseTemplateNodeAttributes%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20_parseTemplateNodeAttribute%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20These%20methods%20may%20be%20overridden%20to%20add%20custom%20metadata%20about%20templates%0A%20%20%20%20%20%20%20*%20to%20either%20%60templateInfo%60%20or%20%60nodeInfo%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%20that%20this%20method%20may%20be%20destructive%20to%20the%20template%2C%20in%20that%0A%20%20%20%20%20%20%20*%20e.g.%20event%20annotations%20may%20be%20removed%20after%20being%20noted%20in%20the%0A%20%20%20%20%20%20%20*%20template%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%3D%7D%20outerTemplateInfo%20Template%20metadata%20from%20the%20outer%0A%20%20%20%20%20%20%20*%20%20%20template%2C%20for%20parsing%20nested%20templates%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Parsed%20template%20metadata%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_parseTemplate(template%2CouterTemplateInfo)%7B%2F%2F%20since%20a%20template%20may%20be%20re-used%2C%20memo-ize%20metadata%0Aif(!template._templateInfo)%7Bvar%20templateInfo%3Dtemplate._templateInfo%3D%7B%7D%3BtemplateInfo.nodeInfoList%3D%5B%5D%3BtemplateInfo.stripWhiteSpace%3DPolymer.legacyOptimizations%7C%7CouterTemplateInfo%26%26outerTemplateInfo.stripWhiteSpace%7C%7Ctemplate.hasAttribute('strip-whitespace')%3Bthis._parseTemplateContent(template%2CtemplateInfo%2C%7Bparent%3Anull%7D)%3B%7Dreturn%20template._templateInfo%3B%7D%7D%2C%7Bkey%3A'_parseTemplateContent'%2Cvalue%3Afunction%20_parseTemplateContent(template%2CtemplateInfo%2CnodeInfo)%7Breturn%20this._parseTemplateNode(template.content%2CtemplateInfo%2CnodeInfo)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20node%20and%20adds%20template%20and%20node%20metadata%20based%20on%0A%20%20%20%20%20%20%20*%20the%20current%20node%2C%20and%20its%20%60childNodes%60%20and%20%60attributes%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20overridden%20to%20add%20custom%20node%20or%20template%20specific%0A%20%20%20%20%20%20%20*%20metadata%20based%20on%20this%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3Dvoid%200%3Bvar%20element%3D%2F**%20%40type%20%7BElement%7D%20*%2Fnode%3Bif(element.localName%3D%3D'template'%26%26!element.hasAttribute('preserve-content'))%7Bnoted%3Dthis._parseTemplateNestedTemplate(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Delse%20if(element.localName%3D%3D%3D'slot')%7B%2F%2F%20For%20ShadyDom%20optimization%2C%20indicating%20there%20is%20an%20insertion%20point%0AtemplateInfo.hasInsertionPoint%3Dtrue%3B%7Dwalker.currentNode%3Delement%3Bif(walker.firstChild())%7Bnoted%3Dthis._parseTemplateChildNodes(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Dif(element.hasAttributes%26%26element.hasAttributes())%7Bnoted%3Dthis._parseTemplateNodeAttributes(element%2CtemplateInfo%2CnodeInfo)%7C%7Cnoted%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20child%20nodes%20for%20the%20given%20root%20node.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20also%20wraps%20whitelisted%20legacy%20template%20extensions%0A%20%20%20%20%20%20%20*%20(%60is%3D%22dom-if%22%60%20and%20%60is%3D%22dom-repeat%22%60)%20with%20their%20equivalent%20element%0A%20%20%20%20%20%20%20*%20wrappers%2C%20collapses%20text%20nodes%2C%20and%20strips%20whitespace%20from%20the%20template%0A%20%20%20%20%20%20%20*%20if%20the%20%60templateInfo.stripWhitespace%60%20setting%20was%20provided.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20root%20Root%20node%20whose%20%60childNodes%60%20will%20be%20parsed%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateChildNodes'%2Cvalue%3Afunction%20_parseTemplateChildNodes(root%2CtemplateInfo%2CnodeInfo)%7Bif(root.localName%3D%3D%3D'script'%7C%7Croot.localName%3D%3D%3D'style')%7Breturn%3B%7Dwalker.currentNode%3Droot%3Bfor(var%20node%3Dwalker.firstChild()%2CparentIndex%3D0%2Cnext%3Bnode%3Bnode%3Dnext)%7B%2F%2F%20Wrap%20templates%0Aif(node.localName%3D%3D'template')%7Bnode%3DwrapTemplateExtension(node)%3B%7D%2F%2F%20collapse%20adjacent%20textNodes%3A%20fixes%20an%20IE%20issue%20that%20can%20cause%0A%2F%2F%20text%20nodes%20to%20be%20inexplicably%20split%20%3D(%0A%2F%2F%20note%20that%20root.normalize()%20should%20work%20but%20does%20not%20so%20we%20do%20this%0A%2F%2F%20manually.%0Awalker.currentNode%3Dnode%3Bnext%3Dwalker.nextSibling()%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%2F**%20Node%20*%2Fn%3Dnext%3Bwhile(n%26%26n.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bnode.textContent%2B%3Dn.textContent%3Bnext%3Dwalker.nextSibling()%3Broot.removeChild(n)%3Bn%3Dnext%3B%7D%2F%2F%20optionally%20strip%20whitespace%0Aif(templateInfo.stripWhiteSpace%26%26!node.textContent.trim())%7Broot.removeChild(node)%3Bcontinue%3B%7D%7Dvar%20childInfo%3D%7BparentIndex%3AparentIndex%2CparentInfo%3AnodeInfo%7D%3Bif(this._parseTemplateNode(node%2CtemplateInfo%2CchildInfo))%7BchildInfo.infoIndex%3DtemplateInfo.nodeInfoList.push(%2F**%20%40type%20%7B!NodeInfo%7D%20*%2FchildInfo)-1%3B%7D%2F%2F%20Increment%20if%20not%20removed%0Awalker.currentNode%3Dnode%3Bif(walker.parentNode())%7BparentIndex%2B%2B%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20content%20for%20the%20given%20nested%20%60%3Ctemplate%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Nested%20template%20info%20is%20stored%20as%20%60templateInfo%60%20in%20the%20current%20node's%0A%20%20%20%20%20%20%20*%20%60nodeInfo%60.%20%60template.content%60%20is%20removed%20and%20stored%20in%20%60templateInfo%60.%0A%20%20%20%20%20%20%20*%20It%20will%20then%20be%20the%20responsibility%20of%20the%20host%20to%20set%20it%20back%20to%20the%0A%20%20%20%20%20%20%20*%20template%20and%20for%20users%20stamping%20nested%20templates%20to%20use%20the%0A%20%20%20%20%20%20%20*%20%60_contentForTemplate%60%20method%20to%20retrieve%20the%20content%20for%20this%20template%0A%20%20%20%20%20%20%20*%20(an%20optimization%20to%20avoid%20the%20cost%20of%20cloning%20nested%20template%20content).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20node%20Node%20to%20parse%20(a%20%3Ctemplate%3E)%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20outerTemplateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%20%20that%20includes%20the%20template%20%60node%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CouterTemplateInfo%2CnodeInfo)%7Bvar%20templateInfo%3Dthis._parseTemplate(node%2CouterTemplateInfo)%3Bvar%20content%3DtemplateInfo.content%3Dnode.content.ownerDocument.createDocumentFragment()%3Bcontent.appendChild(node.content)%3BnodeInfo.templateInfo%3DtemplateInfo%3Breturn%20true%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20template%20node%20attributes%20and%20adds%20node%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20for%20nodes%20of%20interest.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttributes'%2Cvalue%3Afunction%20_parseTemplateNodeAttributes(node%2CtemplateInfo%2CnodeInfo)%7B%2F%2F%20Make%20copy%20of%20original%20attribute%20list%2C%20since%20the%20order%20may%20change%0A%2F%2F%20as%20attributes%20are%20added%20and%20removed%0Avar%20noted%3Dfalse%3Bvar%20attrs%3DArray.from(node.attributes)%3Bfor(var%20i%3Dattrs.length-1%2Ca%3Ba%3Dattrs%5Bi%5D%3Bi--)%7Bnoted%3Dthis._parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Ca.name%2Ca.value)%7C%7Cnoted%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20a%20single%20template%20node%20attribute%20and%20adds%20node%20metadata%20to%0A%20%20%20%20%20%20%20*%20%60nodeInfo%60%20for%20attributes%20of%20interest.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20implementation%20adds%20metadata%20for%20%60on-event%3D%22handler%22%60%20attributes%0A%20%20%20%20%20%20%20*%20and%20%60id%60%20attributes.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7B!TemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7B!NodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7B%2F%2F%20events%20(on-*)%0Aif(name.slice(0%2C3)%3D%3D%3D'on-')%7Bnode.removeAttribute(name)%3BnodeInfo.events%3DnodeInfo.events%7C%7C%5B%5D%3BnodeInfo.events.push(%7Bname%3Aname.slice(3)%2Cvalue%3Avalue%7D)%3Breturn%20true%3B%7D%2F%2F%20static%20id%0Aelse%20if(name%3D%3D%3D'id')%7BnodeInfo.id%3Dvalue%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20%60content%60%20document%20fragment%20for%20a%20given%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20For%20nested%20templates%2C%20Polymer%20performs%20an%20optimization%20to%20cache%20nested%0A%20%20%20%20%20%20%20*%20template%20content%20to%20avoid%20the%20cost%20of%20cloning%20deeply%20nested%20templates.%0A%20%20%20%20%20%20%20*%20This%20method%20retrieves%20the%20cached%20content%20for%20a%20given%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLTemplateElement%7D%20template%20Template%20to%20retrieve%20%60content%60%20for%0A%20%20%20%20%20%20%20*%20%40return%20%7BDocumentFragment%7D%20Content%20fragment%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_contentForTemplate'%2Cvalue%3Afunction%20_contentForTemplate(template)%7Bvar%20templateInfo%3D%2F**%20%40type%20%7BHTMLTemplateElementWithInfo%7D%20*%2Ftemplate._templateInfo%3Breturn%20templateInfo%26%26templateInfo.content%7C%7Ctemplate.content%3B%7D%7D%5D)%3Breturn%20TemplateStamp%3B%7D(superClass)%3Breturn%20TemplateStamp%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Ftemplate-stamp.html.js%0A",
            "totalBytes": 19930,
            "wastedBytes": 12190,
            "wastedPercent": 61.16407425990968
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20lifecycleProps%3D%7Battached%3Atrue%2Cdetached%3Atrue%2Cready%3Atrue%2Ccreated%3Atrue%2CbeforeRegister%3Atrue%2Cregistered%3Atrue%2CattributeChanged%3Atrue%2Clisteners%3Atrue%2ChostAttributes%3Atrue%7D%3Bvar%20excludeOnInfo%3D%7Battached%3Atrue%2Cdetached%3Atrue%2Cready%3Atrue%2Ccreated%3Atrue%2CbeforeRegister%3Atrue%2Cregistered%3Atrue%2CattributeChanged%3Atrue%2Cbehaviors%3Atrue%2C_noAccessors%3Atrue%7D%3Bvar%20excludeOnBehaviors%3DObject.assign(%7Blisteners%3Atrue%2ChostAttributes%3Atrue%2Cproperties%3Atrue%2Cobservers%3Atrue%7D%2CexcludeOnInfo)%3Bfunction%20copyProperties(source%2Ctarget%2CexcludeProps)%7Bvar%20noAccessors%3Dsource._noAccessors%3Bfor(var%20p%20in%20source)%7Bif(!(p%20in%20excludeProps))%7Bif(noAccessors)%7Btarget%5Bp%5D%3Dsource%5Bp%5D%3B%7Delse%7Bvar%20pd%3DObject.getOwnPropertyDescriptor(source%2Cp)%3Bif(pd)%7B%2F%2F%20ensure%20property%20is%20configurable%20so%20that%20a%20later%20behavior%20can%0A%2F%2F%20re-configure%20it.%0Apd.configurable%3Dtrue%3BObject.defineProperty(target%2Cp%2Cpd)%3B%7D%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20Applies%20a%20%22legacy%22%20behavior%20or%20array%20of%20behaviors%20to%20the%20provided%20class.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20this%20method%20will%20automatically%20also%20apply%20the%20%60Polymer.LegacyElementMixin%60%0A%20%20%20%20%20*%20to%20ensure%20that%20any%20legacy%20behaviors%20can%20rely%20on%20legacy%20Polymer%20API%20on%0A%20%20%20%20%20*%20the%20underlying%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40template%20T%0A%20%20%20%20%20*%20%40param%20%7B!Object%7C!Array%3C!Object%3E%7D%20behaviors%20Behavior%20object%20or%20array%20of%20behaviors.%0A%20%20%20%20%20*%20%40param%20%7Bfunction(new%3AT)%7D%20klass%20Element%20class.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AT)%7D%20Returns%20a%20new%20Element%20class%20extended%20by%20the%0A%20%20%20%20%20*%20passed%20in%20%60behaviors%60%20and%20also%20by%20%60Polymer.LegacyElementMixin%60.%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%2C%20checkTypes%7D%0A%20%20%20%20%20*%2Ffunction%20mixinBehaviors(behaviors%2Cklass)%7Breturn%20GenerateClassFromInfo(%7B%7D%2CPolymer.LegacyElementMixin(klass)%2Cbehaviors)%3B%7D%2F%2F%20NOTE%3A%0A%2F%2F%201.x%0A%2F%2F%20Behaviors%20were%20mixed%20in%20*in%20reverse%20order*%20and%20de-duped%20on%20the%20fly.%0A%2F%2F%20The%20rule%20was%20that%20behavior%20properties%20were%20copied%20onto%20the%20element%0A%2F%2F%20prototype%20if%20and%20only%20if%20the%20property%20did%20not%20already%20exist.%0A%2F%2F%20Given%3A%20Polymer%7B%20behaviors%3A%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%7D%2C%20property%20copy%20order%20was%3A%0A%2F%2F%20(1)%2C%20B%2C%20(2)%2C%20A%2C%20(3)%20C.%20This%20means%20prototype%20properties%20win%20over%0A%2F%2F%20B%20properties%20win%20over%20A%20win%20over%20C.%20This%20mirrors%20what%20would%20happen%0A%2F%2F%20with%20inheritance%20if%20element%20extended%20B%20extended%20A%20extended%20C.%0A%2F%2F%0A%2F%2F%20Again%20given%2C%20Polymer%7B%20behaviors%3A%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%7D%2C%20the%20resulting%0A%2F%2F%20%60behaviors%60%20array%20was%20%5BC%2C%20A%2C%20B%5D.%0A%2F%2F%20Behavior%20lifecycle%20methods%20were%20called%20in%20behavior%20array%20order%0A%2F%2F%20followed%20by%20the%20element%2C%20e.g.%20(1)%20C.created%2C%20(2)%20A.created%2C%0A%2F%2F%20(3)%20B.created%2C%20(4)%20element.created.%20There%20was%20no%20support%20for%0A%2F%2F%20super%2C%20and%20%22super-behavior%22%20methods%20were%20callable%20only%20by%20name).%0A%2F%2F%0A%2F%2F%202.x%0A%2F%2F%20Behaviors%20are%20made%20into%20proper%20mixins%20which%20live%20in%20the%0A%2F%2F%20element's%20prototype%20chain.%20Behaviors%20are%20placed%20in%20the%20element%20prototype%0A%2F%2F%20eldest%20to%20youngest%20and%20de-duped%20youngest%20to%20oldest%3A%0A%2F%2F%20So%2C%20first%20%5BA%2C%20B%2C%20C%2C%20A%2C%20B%5D%20becomes%20%5BC%2C%20A%2C%20B%5D%20then%2C%0A%2F%2F%20the%20element%20prototype%20becomes%20(oldest)%20(1)%20Polymer.Element%2C%20(2)%20class(C)%2C%0A%2F%2F%20(3)%20class(A)%2C%20(4)%20class(B)%2C%20(5)%20class(Polymer(%7B...%7D)).%0A%2F%2F%20Result%3A%0A%2F%2F%20This%20means%20element%20properties%20win%20over%20B%20properties%20win%20over%20A%20win%0A%2F%2F%20over%20C.%20(same%20as%201.x)%0A%2F%2F%20If%20lifecycle%20is%20called%20(super%20then%20me)%2C%20order%20is%0A%2F%2F%20(1)%20C.created%2C%20(2)%20A.created%2C%20(3)%20B.created%2C%20(4)%20element.created%0A%2F%2F%20(again%20same%20as%201.x)%0Afunction%20applyBehaviors(proto%2Cbehaviors%2Clifecycle)%7Bfor(var%20i%3D0%3Bi%3Cbehaviors.length%3Bi%2B%2B)%7BapplyInfo(proto%2Cbehaviors%5Bi%5D%2Clifecycle%2CexcludeOnBehaviors)%3B%7D%7Dfunction%20applyInfo(proto%2Cinfo%2Clifecycle%2CexcludeProps)%7BcopyProperties(info%2Cproto%2CexcludeProps)%3Bfor(var%20p%20in%20lifecycleProps)%7Bif(info%5Bp%5D)%7Blifecycle%5Bp%5D%3Dlifecycle%5Bp%5D%7C%7C%5B%5D%3Blifecycle%5Bp%5D.push(info%5Bp%5D)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%7D%20behaviors%20List%20of%20behaviors%20to%20flatten.%0A%20%20%20%20%20*%20%40param%20%7BArray%3D%7D%20list%20Target%20list%20to%20flatten%20behaviors%20into.%0A%20%20%20%20%20*%20%40param%20%7BArray%3D%7D%20exclude%20List%20of%20behaviors%20to%20exclude%20from%20the%20list.%0A%20%20%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20the%20list%20of%20flattened%20behaviors.%0A%20%20%20%20%20*%2Ffunction%20flattenBehaviors(behaviors%2Clist%2Cexclude)%7Blist%3Dlist%7C%7C%5B%5D%3Bfor(var%20i%3Dbehaviors.length-1%3Bi%3E%3D0%3Bi--)%7Bvar%20b%3Dbehaviors%5Bi%5D%3Bif(b)%7Bif(Array.isArray(b))%7BflattenBehaviors(b%2Clist)%3B%7Delse%7B%2F%2F%20dedup%0Aif(list.indexOf(b)%3C0%26%26(!exclude%7C%7Cexclude.indexOf(b)%3C0))%7Blist.unshift(b)%3B%7D%7D%7Delse%7Bconsole.warn('behavior%20is%20null%2C%20check%20for%20missing%20or%20404%20import')%3B%7D%7Dreturn%20list%3B%7D%2F*%20Note%20about%20construction%20and%20extension%20of%20legacy%20classes.%0A%20%20%20%20%20%20%5BChanged%20in%20Q4%202018%20to%20optimize%20performance.%5D%0A%0A%20%20%20%20%20%20When%20calling%20%60Polymer%60%20or%20%60mixinBehaviors%60%2C%20the%20generated%20class%20below%20is%0A%20%20%20%20%20%20made.%20The%20list%20of%20behaviors%20was%20previously%20made%20into%20one%20generated%20class%20per%0A%20%20%20%20%20%20behavior%2C%20but%20this%20is%20no%20longer%20the%20case%20as%20behaviors%20are%20now%20called%0A%20%20%20%20%20%20manually.%20Note%2C%20there%20may%20*still*%20be%20multiple%20generated%20classes%20in%20the%0A%20%20%20%20%20%20element's%20prototype%20chain%20if%20extension%20is%20used%20with%20%60mixinBehaviors%60.%0A%0A%20%20%20%20%20%20The%20generated%20class%20is%20directly%20tied%20to%20the%20info%20object%20and%20behaviors%0A%20%20%20%20%20%20used%20to%20create%20it.%20That%20list%20of%20behaviors%20is%20filtered%20so%20it's%20only%20the%0A%20%20%20%20%20%20behaviors%20not%20active%20on%20the%20superclass.%20In%20order%20to%20call%20through%20to%20the%0A%20%20%20%20%20%20entire%20list%20of%20lifecycle%20methods%2C%20it's%20important%20to%20call%20%60super%60.%0A%0A%20%20%20%20%20%20The%20element's%20%60properties%60%20and%20%60observers%60%20are%20controlled%20via%20the%20finalization%0A%20%20%20%20%20%20mechanism%20provided%20by%20%60PropertiesMixin%60.%20%60Properties%60%20and%20%60observers%60%20are%0A%20%20%20%20%20%20collected%20by%20manually%20traversing%20the%20prototype%20chain%20and%20merging.%0A%0A%20%20%20%20%20%20To%20limit%20changes%2C%20the%20%60_registered%60%20method%20is%20called%20via%20%60_initializeProperties%60%0A%20%20%20%20%20%20and%20not%20%60_finalizeClass%60.%0A%20%20%20%20*%2F%2F**%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Polymer%20info%20object%0A%20%20%20%20%20*%20%40param%20%7Bfunction(new%3AHTMLElement)%7D%20Base%20base%20class%20to%20extend%20with%20info%20object%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20behaviors%20behaviors%20to%20copy%20into%20the%20element%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AHTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40suppress%20%7BcheckTypes%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Ffunction%20GenerateClassFromInfo(info%2CBase%2Cbehaviors)%7B%2F%2F%20manages%20behavior%20and%20lifecycle%20processing%20(filled%20in%20after%20class%20definition)%0Avar%20behaviorList%3Dvoid%200%3Bvar%20lifecycle%3D%7B%7D%3B%2F**%20%40private%20*%2Fvar%20PolymerGenerated%3Dfunction(_Base)%7B_inherits(PolymerGenerated%2C_Base)%3Bfunction%20PolymerGenerated()%7B_classCallCheck(this%2CPolymerGenerated)%3Breturn%20_possibleConstructorReturn(this%2C(PolymerGenerated.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated)).apply(this%2Carguments))%3B%7D_createClass(PolymerGenerated%2C%5B%7Bkey%3A'created'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20created()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'created'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.created%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_registered'%2Cvalue%3Afunction%20_registered()%7B%2F*%20NOTE%3A%20%60beforeRegister%60%20is%20called%20here%20for%20bc%2C%20but%20the%20behavior%0A%20%20%20%20%20%20%20%20%20%20%20%20is%20different%20than%20in%201.x.%20In%201.0%2C%20the%20method%20was%20called%20*after*%0A%20%20%20%20%20%20%20%20%20%20%20%20mixing%20prototypes%20together%20but%20*before*%20processing%20of%20meta-objects.%0A%20%20%20%20%20%20%20%20%20%20%20%20However%2C%20dynamic%20effects%20can%20still%20be%20set%20here%20and%20can%20be%20done%20either%0A%20%20%20%20%20%20%20%20%20%20%20%20in%20%60beforeRegister%60%20or%20%60registered%60.%20It%20is%20no%20longer%20possible%20to%20set%0A%20%20%20%20%20%20%20%20%20%20%20%20%60is%60%20in%20%60beforeRegister%60%20as%20you%20could%20in%201.x.%0A%20%20%20%20%20%20%20%20%20%20*%2F%2F%2F%20only%20proceed%20if%20the%20generated%20class'%20prototype%20has%20not%20been%20registered.%0Avar%20generatedProto%3DPolymerGenerated.prototype%3Bif(!generatedProto.hasOwnProperty('__hasRegisterFinished'))%7BgeneratedProto.__hasRegisterFinished%3Dtrue%3B%2F%2F%20ensure%20superclass%20is%20registered%20first.%0A_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_registered'%2Cthis).call(this)%3B%2F%2F%20copy%20properties%20onto%20the%20generated%20class%20lazily%20if%20we're%20optimizing%2C%0Aif(Polymer.legacyOptimizations)%7BcopyPropertiesToProto(generatedProto)%3B%7D%2F%2F%20make%20sure%20legacy%20lifecycle%20is%20called%20on%20the%20*element*'s%20prototype%0A%2F%2F%20and%20not%20the%20generated%20class%20prototype%3B%20if%20the%20element%20has%20been%0A%2F%2F%20extended%2C%20these%20are%20*not*%20the%20same.%0Avar%20proto%3DObject.getPrototypeOf(this)%3Bvar%20list%3Dlifecycle.beforeRegister%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(proto)%3B%7D%7Dlist%3Dlifecycle.registered%3Bif(list)%7Bfor(var%20_i%3D0%3B_i%3Clist.length%3B_i%2B%2B)%7Blist%5B_i%5D.call(proto)%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_applyListeners'%2Cvalue%3Afunction%20_applyListeners()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_applyListeners'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.listeners%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Bvar%20listeners%3Dlist%5Bi%5D%3Bif(listeners)%7Bfor(var%20l%20in%20listeners)%7Bthis._addMethodEventListenerToNode(this%2Cl%2Clisteners%5Bl%5D)%3B%7D%7D%7D%7D%7D%2F%2F%20note%3A%20exception%20to%20%22super%20then%20me%22%20rule%3B%0A%2F%2F%20do%20work%20before%20calling%20super%20so%20that%20super%20attributes%0A%2F%2F%20only%20apply%20if%20not%20already%20set.%0A%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttributes'%2Cvalue%3Afunction%20_ensureAttributes()%7Bvar%20list%3Dlifecycle.hostAttributes%3Bif(list)%7Bfor(var%20i%3Dlist.length-1%3Bi%3E%3D0%3Bi--)%7Bvar%20hostAttributes%3Dlist%5Bi%5D%3Bfor(var%20a%20in%20hostAttributes)%7Bthis._ensureAttribute(a%2ChostAttributes%5Ba%5D)%3B%7D%7D%7D_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'_ensureAttributes'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'ready'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.ready%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attached'%2Cvalue%3Afunction%20attached()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'attached'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.attached%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'detached'%2Cvalue%3Afunction%20detached()%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'detached'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.detached%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Implements%20native%20Custom%20Elements%20%60attributeChangedCallback%60%20to%0A%20%20%20%20%20%20%20%20%20*%20set%20an%20attribute%20value%20to%20a%20property%20via%20%60_attributeToProperty%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute%20that%20changed%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20New%20attribute%20value%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeChanged'%2Cvalue%3Afunction%20attributeChanged(name%2Cold%2Cvalue)%7B_get(PolymerGenerated.prototype.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated.prototype)%2C'attributeChanged'%2Cthis).call(this)%3Bvar%20list%3Dlifecycle.attributeChanged%3Bif(list)%7Bfor(var%20i%3D0%3Bi%3Clist.length%3Bi%2B%2B)%7Blist%5Bi%5D.call(this%2Cname%2Cold%2Cvalue)%3B%7D%7D%7D%7D%5D%2C%5B%7Bkey%3A'_finalizeClass'%2C%2F%2F%20explicitly%20not%20calling%20super._finalizeClass%0Avalue%3Afunction%20_finalizeClass()%7B%2F%2F%20if%20calling%20via%20a%20subclass%20that%20hasn't%20been%20generated%2C%20pass%20through%20to%20super%0Aif(!this.hasOwnProperty(window.JSCompiler_renameProperty('generatedFrom'%2Cthis)))%7B_get(PolymerGenerated.__proto__%7C%7CObject.getPrototypeOf(PolymerGenerated)%2C'_finalizeClass'%2Cthis).call(this)%3B%7Delse%7B%2F%2F%20interleave%20properties%20and%20observers%20per%20behavior%20and%20%60info%60%0Aif(behaviorList)%7Bfor(var%20i%3D0%2Cb%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7Bb%3DbehaviorList%5Bi%5D%3Bif(b.properties)%7Bthis.createProperties(b.properties)%3B%7Dif(b.observers)%7Bthis.createObservers(b.observers%2Cb.properties)%3B%7D%7D%7Dif(info.properties)%7Bthis.createProperties(info.properties)%3B%7Dif(info.observers)%7Bthis.createObservers(info.observers%2Cinfo.properties)%3B%7D%2F%2F%20make%20sure%20to%20prepare%20the%20element%20template%0Athis._prepareTemplate()%3B%7D%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Bvar%20properties%3D%7B%7D%3Bif(behaviorList)%7Bfor(var%20i%3D0%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7BObject.assign(properties%2CbehaviorList%5Bi%5D.properties)%3B%7D%7DObject.assign(properties%2Cinfo.properties)%3Breturn%20properties%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Bvar%20observers%3D%5B%5D%3Bif(behaviorList)%7Bfor(var%20i%3D0%2Cb%3Bi%3CbehaviorList.length%3Bi%2B%2B)%7Bb%3DbehaviorList%5Bi%5D%3Bif(b.observers)%7Bobservers%3Dobservers.concat(b.observers)%3B%7D%7D%7Dif(info.observers)%7Bobservers%3Dobservers.concat(info.observers)%3B%7Dreturn%20observers%3B%7D%7D%5D)%3Breturn%20PolymerGenerated%3B%7D(Base)%3B%2F%2F%20apply%20behaviors%2C%20note%20actual%20copying%20is%20done%20lazily%20at%20first%20instance%20creation%0Aif(behaviors)%7B%2F%2F%20NOTE%3A%20ensure%20the%20behavior%20is%20extending%20a%20class%20with%0A%2F%2F%20legacy%20element%20api.%20This%20is%20necessary%20since%20behaviors%20expect%20to%20be%20able%0A%2F%2F%20to%20access%201.x%20legacy%20api.%0Aif(!Array.isArray(behaviors))%7Bbehaviors%3D%5Bbehaviors%5D%3B%7Dvar%20superBehaviors%3DBase.prototype.behaviors%3B%2F%2F%20get%20flattened%2C%20deduped%20list%20of%20behaviors%20*not*%20already%20on%20super%20class%0AbehaviorList%3DflattenBehaviors(behaviors%2Cnull%2CsuperBehaviors)%3BPolymerGenerated.prototype.behaviors%3DsuperBehaviors%3FsuperBehaviors.concat(behaviors)%3AbehaviorList%3B%7Dvar%20copyPropertiesToProto%3Dfunction%20copyPropertiesToProto(proto)%7Bif(behaviorList)%7BapplyBehaviors(proto%2CbehaviorList%2Clifecycle)%3B%7DapplyInfo(proto%2Cinfo%2Clifecycle%2CexcludeOnInfo)%3B%7D%3B%2F%2F%20copy%20properties%20if%20we're%20not%20optimizing%0Aif(!Polymer.legacyOptimizations)%7BcopyPropertiesToProto(PolymerGenerated.prototype)%3B%7DPolymerGenerated.generatedFrom%3Dinfo%3Breturn%20PolymerGenerated%3B%7D%2F**%0A%20%20%20%20%20*%20Generates%20a%20class%20that%20extends%20%60Polymer.LegacyElement%60%20based%20on%20the%0A%20%20%20%20%20*%20provided%20info%20object.%20%20Metadata%20objects%20on%20the%20%60info%60%20object%0A%20%20%20%20%20*%20(%60properties%60%2C%20%60observers%60%2C%20%60listeners%60%2C%20%60behaviors%60%2C%20%60is%60)%20are%20used%0A%20%20%20%20%20*%20for%20Polymer's%20meta-programming%20systems%2C%20and%20any%20functions%20are%20copied%0A%20%20%20%20%20*%20to%20the%20generated%20class.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Valid%20%22metadata%22%20values%20are%20as%20follows%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60is%60%3A%20String%20providing%20the%20tag%20name%20to%20register%20the%20element%20under.%20In%0A%20%20%20%20%20*%20addition%2C%20if%20a%20%60dom-module%60%20with%20the%20same%20id%20exists%2C%20the%20first%20template%0A%20%20%20%20%20*%20in%20that%20%60dom-module%60%20will%20be%20stamped%20into%20the%20shadow%20root%20of%20this%20element%2C%0A%20%20%20%20%20*%20with%20support%20for%20declarative%20event%20listeners%20(%60on-...%60)%2C%20Polymer%20data%0A%20%20%20%20%20*%20bindings%20(%60%5B%5B...%5D%5D%60%20and%20%60%7B%7B...%7D%7D%60)%2C%20and%20id-based%20node%20finding%20into%0A%20%20%20%20%20*%20%60this.%24%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60properties%60%3A%20Object%20describing%20property-related%20metadata%20used%20by%20Polymer%0A%20%20%20%20%20*%20features%20(key%3A%20property%20names%2C%20value%3A%20object%20containing%20property%20metadata).%0A%20%20%20%20%20*%20Valid%20keys%20in%20per-property%20metadata%20include%3A%0A%20%20%20%20%20*%20-%20%60type%60%20(String%7CNumber%7CObject%7CArray%7C...)%3A%20Used%20by%0A%20%20%20%20%20*%20%20%20%60attributeChangedCallback%60%20to%20determine%20how%20string-based%20attributes%0A%20%20%20%20%20*%20%20%20are%20deserialized%20to%20JavaScript%20property%20values.%0A%20%20%20%20%20*%20-%20%60notify%60%20(boolean)%3A%20Causes%20a%20change%20in%20the%20property%20to%20fire%20a%0A%20%20%20%20%20*%20%20%20non-bubbling%20event%20called%20%60%3Cproperty%3E-changed%60.%20Elements%20that%20have%0A%20%20%20%20%20*%20%20%20enabled%20two-way%20binding%20to%20the%20property%20use%20this%20event%20to%20observe%20changes.%0A%20%20%20%20%20*%20-%20%60readOnly%60%20(boolean)%3A%20Creates%20a%20getter%20for%20the%20property%2C%20but%20no%20setter.%0A%20%20%20%20%20*%20%20%20To%20set%20a%20read-only%20property%2C%20use%20the%20private%20setter%20method%0A%20%20%20%20%20*%20%20%20%60_setProperty(property%2C%20value)%60.%0A%20%20%20%20%20*%20-%20%60observer%60%20(string)%3A%20Observer%20method%20name%20that%20will%20be%20called%20when%0A%20%20%20%20%20*%20%20%20the%20property%20changes.%20The%20arguments%20of%20the%20method%20are%0A%20%20%20%20%20*%20%20%20%60(value%2C%20previousValue)%60.%0A%20%20%20%20%20*%20-%20%60computed%60%20(string)%3A%20String%20describing%20method%20and%20dependent%20properties%0A%20%20%20%20%20*%20%20%20for%20computing%20the%20value%20of%20this%20property%20(e.g.%20%60'computeFoo(bar%2C%20zot)'%60).%0A%20%20%20%20%20*%20%20%20Computed%20properties%20are%20read-only%20by%20default%20and%20can%20only%20be%20changed%0A%20%20%20%20%20*%20%20%20via%20the%20return%20value%20of%20the%20computing%20method.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60observers%60%3A%20Array%20of%20strings%20describing%20multi-property%20observer%20methods%0A%20%20%20%20%20*%20%20and%20their%20dependent%20properties%20(e.g.%20%60'observeABC(a%2C%20b%2C%20c)'%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60listeners%60%3A%20Object%20describing%20event%20listeners%20to%20be%20added%20to%20each%0A%20%20%20%20%20*%20%20instance%20of%20this%20element%20(key%3A%20event%20name%2C%20value%3A%20method%20name).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60behaviors%60%3A%20Array%20of%20additional%20%60info%60%20objects%20containing%20metadata%0A%20%20%20%20%20*%20and%20callbacks%20in%20the%20same%20format%20as%20the%20%60info%60%20object%20here%20which%20are%0A%20%20%20%20%20*%20merged%20into%20this%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60hostAttributes%60%3A%20Object%20listing%20attributes%20to%20be%20applied%20to%20the%20host%0A%20%20%20%20%20*%20%20once%20created%20(key%3A%20attribute%20name%2C%20value%3A%20attribute%20value).%20%20Values%0A%20%20%20%20%20*%20%20are%20serialized%20based%20on%20the%20type%20of%20the%20value.%20%20Host%20attributes%20should%0A%20%20%20%20%20*%20%20generally%20be%20limited%20to%20attributes%20such%20as%20%60tabIndex%60%20and%20%60aria-...%60.%0A%20%20%20%20%20*%20%20Attributes%20in%20%60hostAttributes%60%20are%20only%20applied%20if%20a%20user-supplied%0A%20%20%20%20%20*%20%20attribute%20is%20not%20already%20present%20(attributes%20in%20markup%20override%0A%20%20%20%20%20*%20%20%60hostAttributes%60).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20In%20addition%2C%20the%20following%20Polymer-specific%20callbacks%20may%20be%20provided%3A%0A%20%20%20%20%20*%20-%20%60registered%60%3A%20called%20after%20first%20instance%20of%20this%20element%2C%0A%20%20%20%20%20*%20-%20%60created%60%3A%20called%20during%20%60constructor%60%0A%20%20%20%20%20*%20-%20%60attached%60%3A%20called%20during%20%60connectedCallback%60%0A%20%20%20%20%20*%20-%20%60detached%60%3A%20called%20during%20%60disconnectedCallback%60%0A%20%20%20%20%20*%20-%20%60ready%60%3A%20called%20before%20first%20%60attached%60%2C%20after%20all%20properties%20of%0A%20%20%20%20%20*%20%20%20this%20element%20have%20been%20propagated%20to%20its%20template%20and%20all%20observers%0A%20%20%20%20%20*%20%20%20have%20run%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PolymerInit%7D%20info%20Object%20containing%20Polymer%20metadata%20and%20functions%0A%20%20%20%20%20*%20%20%20to%20become%20class%20methods.%0A%20%20%20%20%20*%20%40template%20T%0A%20%20%20%20%20*%20%40param%20%7Bfunction(T)%3AT%7D%20mixin%20Optional%20mixin%20to%20apply%20to%20legacy%20base%20class%0A%20%20%20%20%20*%20%20%20before%20extending%20with%20Polymer%20metaprogramming.%0A%20%20%20%20%20*%20%40return%20%7Bfunction(new%3AHTMLElement)%7D%20Generated%20class%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%2FPolymer.Class%3Dfunction(info%2Cmixin)%7Bif(!info)%7Bconsole.warn('Polymer.Class%20requires%20%60info%60%20argument')%3B%7Dvar%20klass%3Dmixin%3Fmixin(Polymer.LegacyElementMixin(HTMLElement))%3APolymer.LegacyElementMixin(HTMLElement)%3Bklass%3DGenerateClassFromInfo(info%2Cklass%2Cinfo.behaviors)%3Bif(info._enableDisableUpgrade)%7Bklass%3DPolymer.DisableUpgradeMixin(klass)%3B%7D%2F%2F%20decorate%20klass%20with%20registration%20info%0Aklass.is%3Dklass.prototype.is%3Dinfo.is%3Breturn%20klass%3B%7D%3BPolymer.mixinBehaviors%3DmixinBehaviors%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fclass.html.js%0A",
            "totalBytes": 19044,
            "wastedBytes": 10593,
            "wastedPercent": 55.62381852551985
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "totalBytes": 17664,
            "wastedBytes": 7555,
            "wastedPercent": 42.77022145039232
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Element%20mixin%20for%20recording%20dynamic%20associations%20between%20item%20paths%20in%20a%0A%20%20%20*%20master%20%60items%60%20array%20and%20a%20%60selected%60%20array%20such%20that%20path%20changes%20to%20the%0A%20%20%20*%20master%20array%20(at%20the%20host)%20element%20or%20elsewhere%20via%20data-binding)%20are%0A%20%20%20*%20correctly%20propagated%20to%20items%20in%20the%20selected%20array%20and%20vice-versa.%0A%20%20%20*%0A%20%20%20*%20The%20%60items%60%20property%20accepts%20an%20array%20of%20user%20data%2C%20and%20via%20the%0A%20%20%20*%20%60select(item)%60%20and%20%60deselect(item)%60%20API%2C%20updates%20the%20%60selected%60%20property%0A%20%20%20*%20which%20may%20be%20bound%20to%20other%20parts%20of%20the%20application%2C%20and%20any%20changes%20to%0A%20%20%20*%20sub-fields%20of%20%60selected%60%20item(s)%20will%20be%20kept%20in%20sync%20with%20items%20in%20the%0A%20%20%20*%20%60items%60%20array.%20%20When%20%60multi%60%20is%20false%2C%20%60selected%60%20is%20a%20property%0A%20%20%20*%20representing%20the%20last%20selected%20item.%20%20When%20%60multi%60%20is%20true%2C%20%60selected%60%0A%20%20%20*%20is%20an%20array%20of%20multiply%20selected%20items.%0A%20%20%20*%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40appliesMixin%20Polymer.ElementMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20mixin%20for%20recording%20dynamic%20associations%20between%20item%20paths%20in%20a%0A%20%20%20*%20master%20%60items%60%20array%20and%20a%20%60selected%60%20array%0A%20%20%20*%2Fvar%20ArraySelectorMixin%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ElementMixin%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20elementBase%3DPolymer.ElementMixin(superClass)%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_ArraySelectorMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20ArraySelectorMixin%3Dfunction(_elementBase)%7B_inherits(ArraySelectorMixin%2C_elementBase)%3B_createClass(ArraySelectorMixin%2Cnull%2C%5B%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20An%20array%20containing%20items%20from%20which%20selection%20will%20be%20made.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fitems%3A%7Btype%3AArray%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60true%60%2C%20multiple%20items%20may%20be%20selected%20at%20once%20(in%20this%20case%2C%0A%20%20%20%20%20%20%20%20%20%20%20*%20%60selected%60%20is%20an%20array%20of%20currently%20selected%20items).%20%20When%20%60false%60%2C%0A%20%20%20%20%20%20%20%20%20%20%20*%20only%20one%20item%20may%20be%20selected%20at%20a%20time.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fmulti%3A%7Btype%3ABoolean%2Cvalue%3Afalse%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20true%2C%20this%20is%20an%20array%20that%20contains%20any%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20false%2C%20this%20is%20the%20currently%20selected%20item%2C%20or%20%60null%60%0A%20%20%20%20%20%20%20%20%20%20%20*%20if%20no%20item%20is%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40type%20%7B%3F(Object%7CArray%3C!Object%3E)%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%2Fselected%3A%7Btype%3AObject%2Cnotify%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60multi%60%20is%20false%2C%20this%20is%20the%20currently%20selected%20item%2C%20or%20%60null%60%0A%20%20%20%20%20%20%20%20%20%20%20*%20if%20no%20item%20is%20selected.%0A%20%20%20%20%20%20%20%20%20%20%20*%20%40type%20%7B%3FObject%7D%0A%20%20%20%20%20%20%20%20%20%20%20*%2FselectedItem%3A%7Btype%3AObject%2Cnotify%3Atrue%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20When%20%60true%60%2C%20calling%20%60select%60%20on%20an%20item%20that%20is%20already%20selected%0A%20%20%20%20%20%20%20%20%20%20%20*%20will%20deselect%20the%20item.%0A%20%20%20%20%20%20%20%20%20%20%20*%2Ftoggle%3A%7Btype%3ABoolean%2Cvalue%3Afalse%7D%7D%3B%7D%7D%2C%7Bkey%3A'observers'%2Cget%3Afunction%20get()%7Breturn%5B'__updateSelection(multi%2C%20items.*)'%5D%3B%7D%7D%5D)%3Bfunction%20ArraySelectorMixin()%7B_classCallCheck(this%2CArraySelectorMixin)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(ArraySelectorMixin.__proto__%7C%7CObject.getPrototypeOf(ArraySelectorMixin)).call(this))%3B_this.__lastItems%3Dnull%3B_this.__lastMulti%3Dnull%3B_this.__selectedMap%3Dnull%3Breturn%20_this%3B%7D_createClass(ArraySelectorMixin%2C%5B%7Bkey%3A'__updateSelection'%2Cvalue%3Afunction%20__updateSelection(multi%2CitemsInfo)%7Bvar%20path%3DitemsInfo.path%3Bif(path%3D%3D'items')%7B%2F%2F%20Case%201%20-%20items%20array%20changed%2C%20so%20diff%20against%20previous%20array%20and%0A%2F%2F%20deselect%20any%20removed%20items%20and%20adjust%20selected%20indices%0Avar%20newItems%3DitemsInfo.base%7C%7C%5B%5D%3Bvar%20lastItems%3Dthis.__lastItems%3Bvar%20lastMulti%3Dthis.__lastMulti%3Bif(multi!%3D%3DlastMulti)%7Bthis.clearSelection()%3B%7Dif(lastItems)%7Bvar%20splices%3DPolymer.ArraySplice.calculateSplices(newItems%2ClastItems)%3Bthis.__applySplices(splices)%3B%7Dthis.__lastItems%3DnewItems%3Bthis.__lastMulti%3Dmulti%3B%7Delse%20if(itemsInfo.path%3D%3D'items.splices')%7B%2F%2F%20Case%202%20-%20got%20specific%20splice%20information%20describing%20the%20array%20mutation%3A%0A%2F%2F%20deselect%20any%20removed%20items%20and%20adjust%20selected%20indices%0Athis.__applySplices(itemsInfo.value.indexSplices)%3B%7Delse%7B%2F%2F%20Case%203%20-%20an%20array%20element%20was%20changed%2C%20so%20deselect%20the%20previous%0A%2F%2F%20item%20for%20that%20index%20if%20it%20was%20previously%20selected%0Avar%20part%3Dpath.slice('items.'.length)%3Bvar%20idx%3DparseInt(part%2C10)%3Bif(part.indexOf('.')%3C0%26%26part%3D%3Didx)%7Bthis.__deselectChangedIdx(idx)%3B%7D%7D%7D%7D%2C%7Bkey%3A'__applySplices'%2Cvalue%3Afunction%20__applySplices(splices)%7Bvar%20_this2%3Dthis%3Bvar%20selected%3Dthis.__selectedMap%3B%2F%2F%20Adjust%20selected%20indices%20and%20mark%20removals%0Avar%20_loop%3Dfunction%20_loop(i)%7Bvar%20s%3Dsplices%5Bi%5D%3Bselected.forEach(function(idx%2Citem)%7Bif(idx%3Cs.index)%7B%2F%2F%20no%20change%0A%7Delse%20if(idx%3E%3Ds.index%2Bs.removed.length)%7B%2F%2F%20adjust%20index%0Aselected.set(item%2Cidx%2Bs.addedCount-s.removed.length)%3B%7Delse%7B%2F%2F%20remove%20index%0Aselected.set(item%2C-1)%3B%7D%7D)%3Bfor(var%20j%3D0%3Bj%3Cs.addedCount%3Bj%2B%2B)%7Bvar%20idx%3Ds.index%2Bj%3Bif(selected.has(_this2.items%5Bidx%5D))%7Bselected.set(_this2.items%5Bidx%5D%2Cidx)%3B%7D%7D%7D%3Bfor(var%20i%3D0%3Bi%3Csplices.length%3Bi%2B%2B)%7B_loop(i)%3B%7D%2F%2F%20Update%20linked%20paths%0Athis.__updateLinks()%3B%2F%2F%20Remove%20selected%20items%20that%20were%20removed%20from%20the%20items%20array%0Avar%20sidx%3D0%3Bselected.forEach(function(idx%2Citem)%7Bif(idx%3C0)%7Bif(_this2.multi)%7B_this2.splice('selected'%2Csidx%2C1)%3B%7Delse%7B_this2.selected%3D_this2.selectedItem%3Dnull%3B%7Dselected.delete(item)%3B%7Delse%7Bsidx%2B%2B%3B%7D%7D)%3B%7D%7D%2C%7Bkey%3A'__updateLinks'%2Cvalue%3Afunction%20__updateLinks()%7Bvar%20_this3%3Dthis%3Bthis.__dataLinkedPaths%3D%7B%7D%3Bif(this.multi)%7Bvar%20sidx%3D0%3Bthis.__selectedMap.forEach(function(idx)%7Bif(idx%3E%3D0)%7B_this3.linkPaths('items.'%2Bidx%2C'selected.'%2Bsidx%2B%2B)%3B%7D%7D)%3B%7Delse%7Bthis.__selectedMap.forEach(function(idx)%7B_this3.linkPaths('selected'%2C'items.'%2Bidx)%3B_this3.linkPaths('selectedItem'%2C'items.'%2Bidx)%3B%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Clears%20the%20selection%20state.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'clearSelection'%2Cvalue%3Afunction%20clearSelection()%7B%2F%2F%20Unbind%20previous%20selection%0Athis.__dataLinkedPaths%3D%7B%7D%3B%2F%2F%20The%20selected%20map%20stores%203%20pieces%20of%20information%3A%0A%2F%2F%20key%3A%20items%20array%20object%0A%2F%2F%20value%3A%20items%20array%20index%0A%2F%2F%20order%3A%20selected%20array%20index%0Athis.__selectedMap%3Dnew%20Map()%3B%2F%2F%20Initialize%20selection%0Athis.selected%3Dthis.multi%3F%5B%5D%3Anull%3Bthis.selectedItem%3Dnull%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20item%20is%20currently%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20test%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20item%20is%20selected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isSelected'%2Cvalue%3Afunction%20isSelected(item)%7Breturn%20this.__selectedMap.has(item)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20item%20is%20currently%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20test%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20item%20is%20selected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isIndexSelected'%2Cvalue%3Afunction%20isIndexSelected(idx)%7Breturn%20this.isSelected(this.items%5Bidx%5D)%3B%7D%7D%2C%7Bkey%3A'__deselectChangedIdx'%2Cvalue%3Afunction%20__deselectChangedIdx(idx)%7Bvar%20_this4%3Dthis%3Bvar%20sidx%3Dthis.__selectedIndexForItemIndex(idx)%3Bif(sidx%3E%3D0)%7Bvar%20i%3D0%3Bthis.__selectedMap.forEach(function(idx%2Citem)%7Bif(sidx%3D%3Di%2B%2B)%7B_this4.deselect(item)%3B%7D%7D)%3B%7D%7D%7D%2C%7Bkey%3A'__selectedIndexForItemIndex'%2Cvalue%3Afunction%20__selectedIndexForItemIndex(idx)%7Bvar%20selected%3Dthis.__dataLinkedPaths%5B'items.'%2Bidx%5D%3Bif(selected)%7Breturn%20parseInt(selected.slice('selected.'.length)%2C10)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Deselects%20the%20given%20item%20if%20it%20is%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20deselect%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deselect'%2Cvalue%3Afunction%20deselect(item)%7Bvar%20idx%3Dthis.__selectedMap.get(item)%3Bif(idx%3E%3D0)%7Bthis.__selectedMap.delete(item)%3Bvar%20sidx%3Dvoid%200%3Bif(this.multi)%7Bsidx%3Dthis.__selectedIndexForItemIndex(idx)%3B%7Dthis.__updateLinks()%3Bif(this.multi)%7Bthis.splice('selected'%2Csidx%2C1)%3B%7Delse%7Bthis.selected%3Dthis.selectedItem%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Deselects%20the%20given%20index%20if%20it%20is%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20deselect%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deselectIndex'%2Cvalue%3Afunction%20deselectIndex(idx)%7Bthis.deselect(this.items%5Bidx%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Selects%20the%20given%20item.%20%20When%20%60toggle%60%20is%20true%2C%20this%20will%20automatically%0A%20%20%20%20%20%20%20*%20deselect%20the%20item%20if%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20item%20Item%20from%20%60items%60%20array%20to%20select%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'select'%2Cvalue%3Afunction%20select(item)%7Bthis.selectIndex(this.items.indexOf(item))%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Selects%20the%20given%20index.%20%20When%20%60toggle%60%20is%20true%2C%20this%20will%20automatically%0A%20%20%20%20%20%20%20*%20deselect%20the%20item%20if%20already%20selected.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20idx%20Index%20from%20%60items%60%20array%20to%20select%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'selectIndex'%2Cvalue%3Afunction%20selectIndex(idx)%7Bvar%20item%3Dthis.items%5Bidx%5D%3Bif(!this.isSelected(item))%7Bif(!this.multi)%7Bthis.__selectedMap.clear()%3B%7Dthis.__selectedMap.set(item%2Cidx)%3Bthis.__updateLinks()%3Bif(this.multi)%7Bthis.push('selected'%2Citem)%3B%7Delse%7Bthis.selected%3Dthis.selectedItem%3Ditem%3B%7D%7Delse%20if(this.toggle)%7Bthis.deselectIndex(idx)%3B%7D%7D%7D%5D)%3Breturn%20ArraySelectorMixin%3B%7D(elementBase)%3Breturn%20ArraySelectorMixin%3B%7D)%3B%2F%2F%20export%20mixin%0APolymer.ArraySelectorMixin%3DArraySelectorMixin%3B%2F**%0A%20%20%20*%20%40constructor%0A%20%20%20*%20%40extends%20%7BPolymer.Element%7D%0A%20%20%20*%20%40implements%20%7BPolymer_ArraySelectorMixin%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20baseArraySelector%3DArraySelectorMixin(Polymer.Element)%3B%2F**%0A%20%20%20*%20Element%20implementing%20the%20%60Polymer.ArraySelector%60%20mixin%2C%20which%20records%0A%20%20%20*%20dynamic%20associations%20between%20item%20paths%20in%20a%20master%20%60items%60%20array%20and%20a%0A%20%20%20*%20%60selected%60%20array%20such%20that%20path%20changes%20to%20the%20master%20array%20(at%20the%20host)%0A%20%20%20*%20element%20or%20elsewhere%20via%20data-binding)%20are%20correctly%20propagated%20to%20items%0A%20%20%20*%20in%20the%20selected%20array%20and%20vice-versa.%0A%20%20%20*%0A%20%20%20*%20The%20%60items%60%20property%20accepts%20an%20array%20of%20user%20data%2C%20and%20via%20the%0A%20%20%20*%20%60select(item)%60%20and%20%60deselect(item)%60%20API%2C%20updates%20the%20%60selected%60%20property%0A%20%20%20*%20which%20may%20be%20bound%20to%20other%20parts%20of%20the%20application%2C%20and%20any%20changes%20to%0A%20%20%20*%20sub-fields%20of%20%60selected%60%20item(s)%20will%20be%20kept%20in%20sync%20with%20items%20in%20the%0A%20%20%20*%20%60items%60%20array.%20%20When%20%60multi%60%20is%20false%2C%20%60selected%60%20is%20a%20property%0A%20%20%20*%20representing%20the%20last%20selected%20item.%20%20When%20%60multi%60%20is%20true%2C%20%60selected%60%0A%20%20%20*%20is%20an%20array%20of%20multiply%20selected%20items.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3Cdom-module%20id%3D%22employee-list%22%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3Ctemplate%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Employee%20list%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20id%3D%22employeeList%22%20items%3D%22%7B%7Bemployees%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Cbutton%20on-click%3D%22toggleSelection%22%3ESelect%3C%2Fbutton%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Carray-selector%20id%3D%22selector%22%20items%3D%22%7B%7Bemployees%7D%7D%22%20selected%3D%22%7B%7Bselected%7D%7D%22%20multi%20toggle%3E%3C%2Farray-selector%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdiv%3E%20Selected%20employees%3A%20%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%3Cdom-repeat%20items%3D%22%7B%7Bselected%7D%7D%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Ctemplate%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3EFirst%20name%3A%20%3Cspan%3E%7B%7Bitem.first%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%3ELast%20name%3A%20%3Cspan%3E%7B%7Bitem.last%7D%7D%3C%2Fspan%3E%3C%2Fdiv%3E%0A%20%20%20*%20%20%20%20%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-repeat%3E%0A%20%20%20*%0A%20%20%20*%20%20%20%3C%2Ftemplate%3E%0A%20%20%20*%0A%20%20%20*%20%3C%2Fdom-module%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%60%60%60js%0A%20%20%20*class%20EmployeeList%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20static%20get%20is()%20%7B%20return%20'employee-list'%3B%20%7D%0A%20%20%20*%20%20static%20get%20properties()%20%7B%0A%20%20%20*%20%20%20%20return%20%7B%0A%20%20%20*%20%20%20%20%20%20employees%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20value()%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20return%20%5B%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Bob'%2C%20last%3A%20'Smith'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20%7Bfirst%3A%20'Sally'%2C%20last%3A%20'Johnson'%7D%2C%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%20...%0A%20%20%20*%20%20%20%20%20%20%20%20%20%20%5D%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%20%7D%3B%0A%20%20%20*%20%20%7D%0A%20%20%20*%20%20toggleSelection(e)%20%7B%0A%20%20%20*%20%20%20%20let%20item%20%3D%20this.%24.employeeList.itemForElement(e.target)%3B%0A%20%20%20*%20%20%20%20this.%24.selector.select(item)%3B%0A%20%20%20*%20%20%7D%0A%20%20%20*%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20%7BbaseArraySelector%7D%0A%20%20%20*%20%40appliesMixin%20Polymer.ArraySelectorMixin%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20links%20paths%20between%20an%20input%20%60items%60%20array%20and%0A%20%20%20*%20%20%20an%20output%20%60selected%60%20item%20or%20array%20based%20on%20calls%20to%20its%20selection%20API.%0A%20%20%20*%2Fvar%20ArraySelector%3Dfunction(_baseArraySelector)%7B_inherits(ArraySelector%2C_baseArraySelector)%3Bfunction%20ArraySelector()%7B_classCallCheck(this%2CArraySelector)%3Breturn%20_possibleConstructorReturn(this%2C(ArraySelector.__proto__%7C%7CObject.getPrototypeOf(ArraySelector)).apply(this%2Carguments))%3B%7D_createClass(ArraySelector%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'array-selector'%3B%7D%7D%5D)%3Breturn%20ArraySelector%3B%7D(baseArraySelector)%3BcustomElements.define(ArraySelector.is%2CArraySelector)%3B%2F**%20%40const%20*%2FPolymer.ArraySelector%3DArraySelector%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Farray-selector.html.js%0A",
            "totalBytes": 13519,
            "wastedBytes": 7347,
            "wastedPercent": 54.34573563133368
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20caseMap%3DPolymer.CaseMap%3B%2F%2F%20Save%20map%20of%20native%20properties%3B%20this%20forms%20a%20blacklist%20or%20properties%0A%2F%2F%20that%20won't%20have%20their%20values%20%22saved%22%20by%20%60saveAccessorValue%60%2C%20since%0A%2F%2F%20reading%20from%20an%20HTMLElement%20accessor%20from%20the%20context%20of%20a%20prototype%20throws%0Avar%20nativeProperties%3D%7B%7D%3Bvar%20proto%3DHTMLElement.prototype%3Bwhile(proto)%7Bvar%20props%3DObject.getOwnPropertyNames(proto)%3Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7BnativeProperties%5Bprops%5Bi%5D%5D%3Dtrue%3B%7Dproto%3DObject.getPrototypeOf(proto)%3B%7D%2F**%0A%20%20%20*%20Used%20to%20save%20the%20value%20of%20a%20property%20that%20will%20be%20overridden%20with%0A%20%20%20*%20an%20accessor.%20If%20the%20%60model%60%20is%20a%20prototype%2C%20the%20values%20will%20be%20saved%0A%20%20%20*%20in%20%60__dataProto%60%2C%20and%20it's%20up%20to%20the%20user%20(or%20downstream%20mixin)%20to%0A%20%20%20*%20decide%20how%2Fwhen%20to%20set%20these%20values%20back%20into%20the%20accessors.%0A%20%20%20*%20If%20%60model%60%20is%20already%20an%20instance%20(it%20has%20a%20%60__data%60%20property)%2C%20then%0A%20%20%20*%20the%20value%20will%20be%20set%20as%20a%20pending%20property%2C%20meaning%20the%20user%20should%0A%20%20%20*%20call%20%60_invalidateProperties%60%20or%20%60_flushProperties%60%20to%20take%20effect%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20saveAccessorValue(model%2Cproperty)%7B%2F%2F%20Don't%20read%2Fstore%20value%20for%20any%20native%20properties%20since%20they%20could%20throw%0Aif(!nativeProperties%5Bproperty%5D)%7Bvar%20value%3Dmodel%5Bproperty%5D%3Bif(value!%3D%3Dundefined)%7Bif(model.__data)%7B%2F%2F%20Adding%20accessor%20to%20instance%3B%20update%20the%20property%0A%2F%2F%20It%20is%20the%20user's%20responsibility%20to%20call%20_flushProperties%0Amodel._setPendingProperty(property%2Cvalue)%3B%7Delse%7B%2F%2F%20Adding%20accessor%20to%20proto%3B%20save%20proto's%20value%20for%20instance-time%20use%0Aif(!model.__dataProto)%7Bmodel.__dataProto%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(JSCompiler_renameProperty('__dataProto'%2Cmodel)))%7Bmodel.__dataProto%3DObject.create(model.__dataProto)%3B%7Dmodel.__dataProto%5Bproperty%5D%3Dvalue%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20basic%20meta-programming%20for%20creating%20one%0A%20%20%20*%20or%20more%20property%20accessors%20(getter%2Fsetter%20pair)%20that%20enqueue%20an%20async%0A%20%20%20*%20(batched)%20%60_propertiesChanged%60%20callback.%0A%20%20%20*%0A%20%20%20*%20For%20basic%20usage%20of%20this%20mixin%3A%0A%20%20%20*%20%0A%20%20%20*%20-%20%20%20Declare%20attributes%20to%20observe%20via%20the%20standard%20%60static%20get%20observedAttributes()%60.%20Use%0A%20%20%20*%20%20%20%20%20%60dash-case%60%20attribute%20names%20to%20represent%20%60camelCase%60%20property%20names.%20%0A%20%20%20*%20-%20%20%20Implement%20the%20%60_propertiesChanged%60%20callback%20on%20the%20class.%0A%20%20%20*%20-%20%20%20Call%20%60MyClass.createPropertiesForAttributes()%60%20**once**%20on%20the%20class%20to%20generate%20%0A%20%20%20*%20%20%20%20%20property%20accessors%20for%20each%20observed%20attribute.%20This%20must%20be%20called%20before%20the%20first%20%0A%20%20%20*%20%20%20%20%20instance%20is%20created%2C%20for%20example%2C%20by%20calling%20it%20before%20calling%20%60customElements.define%60.%0A%20%20%20*%20%20%20%20%20It%20can%20also%20be%20called%20lazily%20from%20the%20element's%20%60constructor%60%2C%20as%20long%20as%20it's%20guarded%20so%0A%20%20%20*%20%20%20%20%20that%20the%20call%20is%20only%20made%20once%2C%20when%20the%20first%20instance%20is%20created.%0A%20%20%20*%20-%20%20%20Call%20%60this._enableProperties()%60%20in%20the%20element's%20%60connectedCallback%60%20to%20enable%20%0A%20%20%20*%20%20%20%20%20the%20accessors.%0A%20%20%20*%0A%20%20%20*%20Any%20%60observedAttributes%60%20will%20automatically%20be%0A%20%20%20*%20deserialized%20via%20%60attributeChangedCallback%60%20and%20set%20to%20the%20associated%0A%20%20%20*%20property%20using%20%60dash-case%60-to-%60camelCase%60%20convention.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesChanged%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20for%20reacting%20to%20property%20changes%20from%0A%20%20%20*%20%20%20generated%20property%20accessors.%0A%20%20%20*%2FPolymer.PropertyAccessors%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertiesChanged(superClass)%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyAccessors%3Dfunction(_base)%7B_inherits(PropertyAccessors%2C_base)%3Bfunction%20PropertyAccessors()%7B_classCallCheck(this%2CPropertyAccessors)%3Breturn%20_possibleConstructorReturn(this%2C(PropertyAccessors.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors)).apply(this%2Carguments))%3B%7D_createClass(PropertyAccessors%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implementation%20to%20initialize%20values%20for%0A%20%20%20%20%20%20%20*%20accessors%20created%20for%20values%20that%20already%20existed%20on%20the%20element%0A%20%20%20%20%20%20%20*%20prototype.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7Bif(this.__dataProto)%7Bthis._initializeProtoProperties(this.__dataProto)%3Bthis.__dataProto%3Dnull%3B%7D_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20at%20instance%20time%20with%20bag%20of%20properties%20that%20were%20overwritten%0A%20%20%20%20%20%20%20*%20by%20accessors%20on%20the%20prototype%20when%20accessors%20were%20created.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20sets%20these%20properties%20back%20into%20the%0A%20%20%20%20%20%20%20*%20setter%20at%20instance%20time.%20%20This%20method%20is%20provided%20as%20an%20override%0A%20%20%20%20%20%20%20*%20point%20for%20customizing%20or%20providing%20more%20efficient%20initialization.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20property%20values%20that%20were%20overwritten%0A%20%20%20%20%20%20%20*%20%20%20when%20creating%20property%20accessors.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bfor(var%20p%20in%20props)%7Bthis._setProperty(p%2Cprops%5Bp%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20the%20element%20has%20the%20given%20attribute.%20If%20it%20does%20not%2C%0A%20%20%20%20%20%20%20*%20assigns%20the%20given%20value%20to%20the%20attribute.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20can't%20figure%20out%20%60this%60%20is%20infact%20an%20element%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20attribute%20Name%20of%20attribute%20to%20ensure%20is%20set.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20of%20the%20attribute.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_ensureAttribute'%2Cvalue%3Afunction%20_ensureAttribute(attribute%2Cvalue)%7Bvar%20el%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis%3Bif(!el.hasAttribute(attribute))%7Bthis._valueToNodeAttribute(el%2Cvalue%2Cattribute)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implemention%20to%20serialize%20objects%20as%20JSON.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Property%20value%20to%20serialize.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20String%20serialized%20from%20the%20provided%20property%20value.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_serializeValue'%2Cvalue%3Afunction%20_serializeValue(value)%7B%2F*%20eslint-disable%20no-fallthrough%20*%2Fswitch(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%7Bcase'object'%3Aif(value%20instanceof%20Date)%7Breturn%20value.toString()%3B%7Delse%20if(value)%7Btry%7Breturn%20JSON.stringify(value)%3B%7Dcatch(x)%7Breturn''%3B%7D%7Ddefault%3Areturn%20_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_serializeValue'%2Cthis).call(this%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Converts%20a%20string%20to%20a%20typed%20JavaScript%20value.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20is%20called%20by%20Polymer%20when%20reading%20HTML%20attribute%20values%20to%0A%20%20%20%20%20%20%20*%20JS%20properties.%20%20Users%20may%20override%20this%20method%20on%20Polymer%20element%0A%20%20%20%20%20%20%20*%20prototypes%20to%20provide%20deserialization%20for%20custom%20%60type%60s.%20%20Note%2C%0A%20%20%20%20%20%20%20*%20the%20%60type%60%20argument%20is%20the%20value%20of%20the%20%60type%60%20field%20provided%20in%20the%0A%20%20%20%20%20%20%20*%20%60properties%60%20configuration%20object%20for%20a%20given%20property%2C%20and%20is%0A%20%20%20%20%20%20%20*%20by%20convention%20the%20constructor%20for%20the%20type%20to%20deserialize.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Attribute%20value%20to%20deserialize.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20type%20Type%20to%20deserialize%20the%20string%20to.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Typed%20value%20deserialized%20from%20the%20provided%20string.%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_deserializeValue'%2Cvalue%3Afunction%20_deserializeValue(value%2Ctype)%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40type%20%7B*%7D%0A%20%20%20%20%20%20%20%20%20*%2Fvar%20outValue%3Dvoid%200%3Bswitch(type)%7Bcase%20Object%3Atry%7BoutValue%3DJSON.parse(%2F**%20%40type%20%7Bstring%7D%20*%2Fvalue)%3B%7Dcatch(x)%7B%2F%2F%20allow%20non-JSON%20literals%20like%20Strings%20and%20Numbers%0AoutValue%3Dvalue%3B%7Dbreak%3Bcase%20Array%3Atry%7BoutValue%3DJSON.parse(%2F**%20%40type%20%7Bstring%7D%20*%2Fvalue)%3B%7Dcatch(x)%7BoutValue%3Dnull%3Bconsole.warn('Polymer%3A%3AAttributes%3A%20couldn%5C't%20decode%20Array%20as%20JSON%3A%20'%2Bvalue)%3B%7Dbreak%3Bcase%20Date%3AoutValue%3DisNaN(value)%3FString(value)%3ANumber(value)%3BoutValue%3Dnew%20Date(outValue)%3Bbreak%3Bdefault%3AoutValue%3D_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_deserializeValue'%2Cthis).call(this%2Cvalue%2Ctype)%3Bbreak%3B%7Dreturn%20outValue%3B%7D%2F*%20eslint-enable%20no-fallthrough%20*%2F%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20PropertiesChanged%20implementation%20to%20save%20existing%20prototype%0A%20%20%20%20%20%20%20*%20property%20value%20so%20that%20it%20can%20be%20reset.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20readOnly%20When%20true%2C%20no%20setter%20is%20created%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20calling%20on%20a%20prototype%2C%20any%20overwritten%20values%20are%20saved%20in%0A%20%20%20%20%20%20%20*%20%60__dataProto%60%2C%20and%20it%20is%20up%20to%20the%20subclasser%20to%20decide%20how%2Fwhen%0A%20%20%20%20%20%20%20*%20to%20set%20those%20properties%20back%20into%20the%20accessor.%20%20When%20calling%20on%20an%0A%20%20%20%20%20%20%20*%20instance%2C%20the%20overwritten%20value%20is%20set%20via%20%60_setPendingProperty%60%2C%0A%20%20%20%20%20%20%20*%20and%20the%20user%20should%20call%20%60_invalidateProperties%60%20or%20%60_flushProperties%60%0A%20%20%20%20%20%20%20*%20for%20the%20values%20to%20take%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_definePropertyAccessor'%2Cvalue%3Afunction%20_definePropertyAccessor(property%2CreadOnly)%7BsaveAccessorValue(this%2Cproperty)%3B_get(PropertyAccessors.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyAccessors.prototype)%2C'_definePropertyAccessor'%2Cthis).call(this%2Cproperty%2CreadOnly)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20true%20if%20this%20library%20created%20an%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20accessor%20was%20created%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasAccessor'%2Cvalue%3Afunction%20_hasAccessor(property)%7Breturn%20this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bproperty%5D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20true%20if%20the%20specified%20property%20has%20a%20pending%20change.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20property%20has%20a%20pending%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_isPropertyPending'%2Cvalue%3Afunction%20_isPropertyPending(prop)%7Breturn%20Boolean(this.__dataPending%26%26prop%20in%20this.__dataPending)%3B%7D%7D%5D%2C%5B%7Bkey%3A'createPropertiesForAttributes'%2C%2F**%0A%20%20%20%20%20%20%20*%20Generates%20property%20accessors%20for%20all%20attributes%20in%20the%20standard%0A%20%20%20%20%20%20%20*%20static%20%60observedAttributes%60%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Attribute%20names%20are%20mapped%20to%20property%20names%20using%20the%20%60dash-case%60%20to%0A%20%20%20%20%20%20%20*%20%60camelCase%60%20convention%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20createPropertiesForAttributes()%7Bvar%20a%24%3Dthis.observedAttributes%3Bfor(var%20_i%3D0%3B_i%3Ca%24.length%3B_i%2B%2B)%7Bthis.prototype._createPropertyAccessor(caseMap.dashToCamelCase(a%24%5B_i%5D))%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20an%20attribute%20name%20that%20corresponds%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20By%20default%2C%20converts%20camel%20to%20dash%20case%2C%20e.g.%20%60fooBar%60%20to%20%60foo-bar%60.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20to%20convert%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Attribute%20name%20corresponding%20to%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'attributeNameForProperty'%2Cvalue%3Afunction%20attributeNameForProperty(property)%7Breturn%20caseMap.camelToDashCase(property)%3B%7D%7D%5D)%3Breturn%20PropertyAccessors%3B%7D(base)%3Breturn%20PropertyAccessors%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-accessors.html.js%0A",
            "totalBytes": 12872,
            "wastedBytes": 7300,
            "wastedPercent": 56.71224362958359
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F%2F%20Common%20implementation%20for%20mixin%20%26%20behavior%0Afunction%20mutablePropertyChange(inst%2Cproperty%2Cvalue%2Cold%2CmutableData)%7Bvar%20isObject%3Dvoid%200%3Bif(mutableData)%7BisObject%3D(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D%3D'object'%26%26value!%3D%3Dnull%3B%2F%2F%20Pull%20%60old%60%20for%20Objects%20from%20temp%20cache%2C%20but%20treat%20%60null%60%20as%20a%20primitive%0Aif(isObject)%7Bold%3Dinst.__dataTemp%5Bproperty%5D%3B%7D%7D%2F%2F%20Strict%20equality%20check%2C%20but%20return%20false%20for%20NaN%3D%3D%3DNaN%0Avar%20shouldChange%3Dold!%3D%3Dvalue%26%26(old%3D%3D%3Dold%7C%7Cvalue%3D%3D%3Dvalue)%3B%2F%2F%20Objects%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%0A%2F%2F%20turn)%2C%20which%20is%20used%20for%20dirty-checking%0Aif(isObject%26%26shouldChange)%7Binst.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Dreturn%20shouldChange%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%20arrays%0A%20%20%20*%20(always%20consider%20them%20to%20be%20%22dirty%22)%2C%20for%20use%20on%20elements%20utilizing%0A%20%20%20*%20%60Polymer.PropertyEffects%60%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20cause%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20apply%20this%20mixin%20or%20enable%20the%0A%20%20%20*%20%60Polymer.OptionalMutableData%60%20mixin.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20make%20the%20dirty%20check%20strategy%20configurable%2C%20see%0A%20%20%20*%20%60Polymer.OptionalMutableData%60.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20as%20opposed%20to%20using%20strict%20dirty%20checking%20with%20immutable%0A%20%20%20*%20patterns%20or%20Polymer's%20path%20notification%20API.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20to%20skip%20strict%20dirty-checking%20for%20objects%0A%20%20%20*%20%20%20and%20arrays%0A%20%20%20*%2FPolymer.MutableData%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_MutableData%7D%0A%20%20%20%20%20*%2Fvar%20MutableData%3Dfunction(_superClass)%7B_inherits(MutableData%2C_superClass)%3Bfunction%20MutableData()%7B_classCallCheck(this%2CMutableData)%3Breturn%20_possibleConstructorReturn(this%2C(MutableData.__proto__%7C%7CObject.getPrototypeOf(MutableData)).apply(this%2Carguments))%3B%7D_createClass(MutableData%2C%5B%7Bkey%3A'_shouldPropertyChange'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%20cache%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Ctrue)%3B%7D%7D%5D)%3Breturn%20MutableData%3B%7D(superClass)%3Breturn%20MutableData%3B%7D)%3B%2F**%0A%20%20%20*%20Element%20class%20mixin%20to%20add%20the%20optional%20ability%20to%20skip%20strict%0A%20%20%20*%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20*%20%22dirty%22)%20by%20setting%20a%20%60mutable-data%60%20attribute%20on%20an%20element%20instance.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20allow%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20enable%20this%20mixin%20or%20apply%20the%0A%20%20%20*%20%60Polymer.MutableData%60%20mixin.%0A%20%20%20*%0A%20%20%20*%20While%20this%20mixin%20adds%20the%20ability%20to%20forgo%20Object%2FArray%20dirty%20checking%2C%0A%20%20%20*%20the%20%60mutableData%60%20flag%20defaults%20to%20false%20and%20must%20be%20set%20on%20the%20instance.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20by%20relying%20on%20%60mutableData%3A%20true%60%20as%20opposed%20to%20using%0A%20%20%20*%20strict%20dirty%20checking%20with%20immutable%20patterns%20or%20Polymer's%20path%20notification%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20to%20optionally%20skip%20strict%20dirty-checking%0A%20%20%20*%20%20%20for%20objects%20and%20arrays%0A%20%20%20*%2FPolymer.OptionalMutableData%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_OptionalMutableData%7D%0A%20%20%20%20%20*%2Fvar%20OptionalMutableData%3Dfunction(_superClass2)%7B_inherits(OptionalMutableData%2C_superClass2)%3Bfunction%20OptionalMutableData()%7B_classCallCheck(this%2COptionalMutableData)%3Breturn%20_possibleConstructorReturn(this%2C(OptionalMutableData.__proto__%7C%7CObject.getPrototypeOf(OptionalMutableData)).apply(this%2Carguments))%3B%7D_createClass(OptionalMutableData%2C%5B%7Bkey%3A'_shouldPropertyChange'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20When%20%60this.mutableData%60%20is%20true%20on%20this%20instance%2C%20this%20method%0A%20%20%20%20%20%20%20*%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%20cache%0A%20%20%20%20%20%20%20*%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Cthis.mutableData)%3B%7D%7D%5D%2C%5B%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20%20%20*%20Instance-level%20flag%20for%20configuring%20the%20dirty-checking%20strategy%0A%20%20%20%20%20%20%20%20%20%20%20*%20for%20this%20element.%20%20When%20true%2C%20Objects%20and%20Arrays%20will%20skip%20dirty%0A%20%20%20%20%20%20%20%20%20%20%20*%20checking%2C%20otherwise%20strict%20equality%20checking%20will%20be%20used.%0A%20%20%20%20%20%20%20%20%20%20%20*%2FmutableData%3ABoolean%7D%3B%7D%7D%5D)%3Breturn%20OptionalMutableData%3B%7D(superClass)%3Breturn%20OptionalMutableData%3B%7D)%3B%2F%2F%20Export%20for%20use%20by%20legacy%20behavior%0APolymer.MutableData._mutablePropertyChange%3DmutablePropertyChange%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fmutable-data.html.js%0A",
            "totalBytes": 10198,
            "wastedBytes": 6963,
            "wastedPercent": 68.27809374387135
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20mutablePropertyChange%3Dvoid%200%3B%2F**%20%40suppress%20%7BmissingProperties%7D%20*%2F(function()%7BmutablePropertyChange%3DPolymer.MutableData._mutablePropertyChange%3B%7D)()%3B%2F**%0A%20%20%20*%20Legacy%20element%20behavior%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%20arrays%2C%0A%20%20%20*%20(always%20consider%20them%20to%20be%20%22dirty%22)%20for%20use%20on%20legacy%20API%20Polymer%20elements.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20cause%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20apply%20this%20behavior%20or%20enable%20the%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20In%20order%20to%20make%20the%20dirty%20check%20strategy%20configurable%2C%20see%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20as%20opposed%20to%20using%20strict%20dirty%20checking%20with%20immutable%0A%20%20%20*%20patterns%20or%20Polymer's%20path%20notification%20API.%0A%20%20%20*%0A%20%20%20*%20%40polymerBehavior%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Behavior%20to%20skip%20strict%20dirty-checking%20for%20objects%20and%0A%20%20%20*%20%20%20arrays%0A%20%20%20*%2FPolymer.MutableDataBehavior%3D%7B%2F**%0A%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20provide%20option%20for%20skipping%0A%20%20%20%20%20*%20strict%20equality%20checking%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%0A%20%20%20%20%20*%20cache%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F_shouldPropertyChange%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Ctrue)%3B%7D%7D%3B%2F**%0A%20%20%20*%20Legacy%20element%20behavior%20to%20add%20the%20optional%20ability%20to%20skip%20strict%0A%20%20%20*%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%0A%20%20%20*%20%22dirty%22)%20by%20setting%20a%20%60mutable-data%60%20attribute%20on%20an%20element%20instance.%0A%20%20%20*%0A%20%20%20*%20By%20default%2C%20%60Polymer.PropertyEffects%60%20performs%20strict%20dirty%20checking%20on%0A%20%20%20*%20objects%2C%20which%20means%20that%20any%20deep%20modifications%20to%20an%20object%20or%20array%20will%0A%20%20%20*%20not%20be%20propagated%20unless%20%22immutable%22%20data%20patterns%20are%20used%20(i.e.%20all%20object%0A%20%20%20*%20references%20from%20the%20root%20to%20the%20mutation%20were%20changed).%0A%20%20%20*%0A%20%20%20*%20Polymer%20also%20provides%20a%20proprietary%20data%20mutation%20and%20path%20notification%20API%0A%20%20%20*%20(e.g.%20%60notifyPath%60%2C%20%60set%60%2C%20and%20array%20mutation%20API's)%20that%20allow%20efficient%0A%20%20%20*%20mutation%20and%20notification%20of%20deep%20changes%20in%20an%20object%20graph%20to%20all%20elements%0A%20%20%20*%20bound%20to%20the%20same%20object%20graph.%0A%20%20%20*%0A%20%20%20*%20In%20cases%20where%20neither%20immutable%20patterns%20nor%20the%20data%20mutation%20API%20can%20be%0A%20%20%20*%20used%2C%20applying%20this%20mixin%20will%20allow%20Polymer%20to%20skip%20dirty%20checking%20for%0A%20%20%20*%20objects%20and%20arrays%20(always%20consider%20them%20to%20be%20%22dirty%22).%20%20This%20allows%20a%0A%20%20%20*%20user%20to%20make%20a%20deep%20modification%20to%20a%20bound%20object%20graph%2C%20and%20then%20either%0A%20%20%20*%20simply%20re-set%20the%20object%20(e.g.%20%60this.items%20%3D%20this.items%60)%20or%20call%20%60notifyPath%60%0A%20%20%20*%20(e.g.%20%60this.notifyPath('items')%60)%20to%20update%20the%20tree.%20%20Note%20that%20all%0A%20%20%20*%20elements%20that%20wish%20to%20be%20updated%20based%20on%20deep%20mutations%20must%20apply%20this%0A%20%20%20*%20mixin%20or%20otherwise%20skip%20strict%20dirty%20checking%20for%20objects%2Farrays.%0A%20%20%20*%20Specifically%2C%20any%20elements%20in%20the%20binding%20tree%20between%20the%20source%20of%20a%0A%20%20%20*%20mutation%20and%20the%20consumption%20of%20it%20must%20enable%20this%20behavior%20or%20apply%20the%0A%20%20%20*%20%60Polymer.OptionalMutableDataBehavior%60.%0A%20%20%20*%0A%20%20%20*%20While%20this%20behavior%20adds%20the%20ability%20to%20forgo%20Object%2FArray%20dirty%20checking%2C%0A%20%20%20*%20the%20%60mutableData%60%20flag%20defaults%20to%20false%20and%20must%20be%20set%20on%20the%20instance.%0A%20%20%20*%0A%20%20%20*%20Note%2C%20the%20performance%20characteristics%20of%20propagating%20large%20object%20graphs%0A%20%20%20*%20will%20be%20worse%20by%20relying%20on%20%60mutableData%3A%20true%60%20as%20opposed%20to%20using%0A%20%20%20*%20strict%20dirty%20checking%20with%20immutable%20patterns%20or%20Polymer's%20path%20notification%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40polymerBehavior%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Behavior%20to%20optionally%20skip%20strict%20dirty-checking%20for%20objects%20and%0A%20%20%20*%20%20%20arrays%0A%20%20%20*%2FPolymer.OptionalMutableDataBehavior%3D%7Bproperties%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Instance-level%20flag%20for%20configuring%20the%20dirty-checking%20strategy%0A%20%20%20%20%20%20%20*%20for%20this%20element.%20%20When%20true%2C%20Objects%20and%20Arrays%20will%20skip%20dirty%0A%20%20%20%20%20%20%20*%20checking%2C%20otherwise%20strict%20equality%20checking%20will%20be%20used.%0A%20%20%20%20%20%20%20*%2FmutableData%3ABoolean%7D%2C%2F**%0A%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyEffects%60%20to%20skip%20strict%20equality%20checking%0A%20%20%20%20%20*%20for%20Objects%20and%20Arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Pulls%20the%20value%20to%20dirty%20check%20against%20from%20the%20%60__dataTemp%60%20cache%0A%20%20%20%20%20*%20(rather%20than%20the%20normal%20%60__data%60%20cache)%20for%20Objects.%20%20Since%20the%20temp%0A%20%20%20%20%20*%20cache%20is%20cleared%20at%20the%20end%20of%20a%20turn%2C%20this%20implementation%20allows%0A%20%20%20%20%20*%20side-effects%20of%20deep%20object%20changes%20to%20be%20processed%20by%20re-setting%20the%0A%20%20%20%20%20*%20same%20object%20(using%20the%20temp%20cache%20as%20an%20in-turn%20backstop%20to%20prevent%0A%20%20%20%20%20*%20cycles%20due%20to%202-way%20notification).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20New%20property%20value%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20old%20Previous%20property%20value%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20property%20should%20be%20considered%20a%20change%0A%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F_shouldPropertyChange%3Afunction%20_shouldPropertyChange(property%2Cvalue%2Cold)%7Breturn%20mutablePropertyChange(this%2Cproperty%2Cvalue%2Cold%2Cthis.mutableData)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fmutable-data-behavior.html.js%0A",
            "totalBytes": 6798,
            "wastedBytes": 6278,
            "wastedPercent": 92.35069137981759
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3Bvar%20p%3DElement.prototype%3B%2F**%0A%20%20%20*%20%40const%20%7Bfunction(this%3ANode%2C%20string)%3A%20boolean%7D%0A%20%20%20*%2Fvar%20normalizedMatchesSelector%3Dp.matches%7C%7Cp.matchesSelector%7C%7Cp.mozMatchesSelector%7C%7Cp.msMatchesSelector%7C%7Cp.oMatchesSelector%7C%7Cp.webkitMatchesSelector%3B%2F**%0A%20%20%20*%20Cross-platform%20%60element.matches%60%20shim.%0A%20%20%20*%0A%20%20%20*%20%40function%20matchesSelector%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20check%20selector%20against%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20match%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20node%20matched%20selector%0A%20%20%20*%2Fvar%20matchesSelector%3Dfunction%20matchesSelector(node%2Cselector)%7Breturn%20normalizedMatchesSelector.call(node%2Cselector)%3B%7D%3B%2F**%0A%20%20%20*%20Node%20API%20wrapper%20class%20returned%20from%20%60Polymer.dom.(target)%60%20when%0A%20%20%20*%20%60target%60%20is%20a%20%60Node%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2Fvar%20DomApi%3Dfunction()%7B%2F**%0A%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20for%20which%20to%20create%20a%20Polymer.dom%20helper%20object.%0A%20%20%20%20%20*%2Ffunction%20DomApi(node)%7B_classCallCheck(this%2CDomApi)%3Bthis.node%3Dnode%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20an%20instance%20of%20%60Polymer.FlattenedNodesObserver%60%20that%0A%20%20%20%20%20*%20listens%20for%20node%20changes%20on%20this%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bfunction(!Element%2C%20%7B%20target%3A%20!Element%2C%20addedNodes%3A%20!Array%3C!Element%3E%2C%20removedNodes%3A%20!Array%3C!Element%3E%20%7D)%3Avoid%7D%20callback%20Called%20when%20direct%20or%20distributed%20children%0A%20%20%20%20%20*%20%20%20of%20this%20element%20changes%0A%20%20%20%20%20*%20%40return%20%7B!Polymer.FlattenedNodesObserver%7D%20Observer%20instance%0A%20%20%20%20%20*%2F_createClass(DomApi%2C%5B%7Bkey%3A'observeNodes'%2Cvalue%3Afunction%20observeNodes(callback)%7Breturn%20new%20Polymer.FlattenedNodesObserver(this.node%2Ccallback)%3B%7D%2F**%0A%20%20%20%20%20*%20Disconnects%20an%20observer%20previously%20created%20via%20%60observeNodes%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!Polymer.FlattenedNodesObserver%7D%20observerHandle%20Observer%20instance%0A%20%20%20%20%20*%20%20%20to%20disconnect.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unobserveNodes'%2Cvalue%3Afunction%20unobserveNodes(observerHandle)%7BobserverHandle.disconnect()%3B%7D%2F**%0A%20%20%20%20%20*%20Provided%20as%20a%20backwards-compatible%20API%20only.%20%20This%20method%20does%20nothing.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyObserver'%2Cvalue%3Afunction%20notifyObserver()%7B%7D%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20provided%20node%20is%20contained%20with%20this%20element's%0A%20%20%20%20%20*%20light-DOM%20children%20or%20shadow%20root%2C%20including%20any%20nested%20shadow%20roots%0A%20%20%20%20%20*%20of%20children%20therein.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20test%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20given%20%60node%60%20is%20contained%20within%0A%20%20%20%20%20*%20%20%20this%20element's%20light%20or%20shadow%20DOM.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'deepContains'%2Cvalue%3Afunction%20deepContains(node)%7Bif(this.node.contains(node))%7Breturn%20true%3B%7Dvar%20n%3Dnode%3Bvar%20doc%3Dnode.ownerDocument%3B%2F%2F%20walk%20from%20node%20to%20%60this%60%20or%20%60document%60%0Awhile(n%26%26n!%3D%3Ddoc%26%26n!%3D%3Dthis.node)%7B%2F%2F%20use%20logical%20parentnode%2C%20or%20native%20ShadowRoot%20host%0An%3Dn.parentNode%7C%7Cn.host%3B%7Dreturn%20n%3D%3D%3Dthis.node%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20root%20node%20of%20this%20node.%20%20Equivalent%20to%20%60getRoodNode()%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BNode%7D%20Top%20most%20element%20in%20the%20dom%20tree%20in%20which%20the%20node%0A%20%20%20%20%20*%20exists.%20If%20the%20node%20is%20connected%20to%20a%20document%20this%20is%20either%20a%0A%20%20%20%20%20*%20shadowRoot%20or%20the%20document%3B%20otherwise%2C%20it%20may%20be%20the%20node%0A%20%20%20%20%20*%20itself%20or%20a%20node%20or%20document%20fragment%20containing%20it.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getOwnerRoot'%2Cvalue%3Afunction%20getOwnerRoot()%7Breturn%20this.node.getRootNode()%3B%7D%2F**%0A%20%20%20%20%20*%20For%20slot%20elements%2C%20returns%20the%20nodes%20assigned%20to%20the%20slot%3B%20otherwise%0A%20%20%20%20%20*%20an%20empty%20array.%20It%20is%20equivalent%20to%20%60%3Cslot%3E.addignedNodes(%7Bflatten%3Atrue%7D)%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20Array%20of%20assigned%20nodes%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getDistributedNodes'%2Cvalue%3Afunction%20getDistributedNodes()%7Breturn%20this.node.localName%3D%3D%3D'slot'%3Fthis.node.assignedNodes(%7Bflatten%3Atrue%7D)%3A%5B%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20an%20array%20of%20all%20slots%20this%20element%20was%20distributed%20to.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLSlotElement%3E%7D%20Description%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getDestinationInsertionPoints'%2Cvalue%3Afunction%20getDestinationInsertionPoints()%7Bvar%20ip%24%3D%5B%5D%3Bvar%20n%3Dthis.node.assignedSlot%3Bwhile(n)%7Bip%24.push(n)%3Bn%3Dn.assignedSlot%3B%7Dreturn%20ip%24%3B%7D%2F**%0A%20%20%20%20%20*%20Calls%20%60importNode%60%20on%20the%20%60ownerDocument%60%20for%20this%20node.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20Node%20to%20import%0A%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20deep%20True%20if%20the%20node%20should%20be%20cloned%20deeply%20during%0A%20%20%20%20%20*%20%20%20import%0A%20%20%20%20%20*%20%40return%20%7BNode%7D%20Clone%20of%20given%20node%20imported%20to%20this%20owner%20document%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'importNode'%2Cvalue%3Afunction%20importNode(node%2Cdeep)%7Bvar%20doc%3Dthis.node%20instanceof%20Document%3Fthis.node%3Athis.node.ownerDocument%3Breturn%20doc.importNode(node%2Cdeep)%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!Node%3E%7D%20Returns%20a%20flattened%20list%20of%20all%20child%20nodes%20and%0A%20%20%20%20%20*%20nodes%20assigned%20to%20child%20slots.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'getEffectiveChildNodes'%2Cvalue%3Afunction%20getEffectiveChildNodes()%7Breturn%20Polymer.FlattenedNodesObserver.getFlattenedNodes(this.node)%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20filtered%20list%20of%20flattened%20child%20elements%20for%20this%20element%20based%0A%20%20%20%20%20*%20on%20the%20given%20selector.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20selector%20Selector%20to%20filter%20nodes%20against%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLElement%3E%7D%20List%20of%20flattened%20child%20elements%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'queryDistributedElements'%2Cvalue%3Afunction%20queryDistributedElements(selector)%7Bvar%20c%24%3Dthis.getEffectiveChildNodes()%3Bvar%20list%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dc%24.length%2Cc%3Bi%3Cl%26%26(c%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7Bif(c.nodeType%3D%3D%3DNode.ELEMENT_NODE%26%26matchesSelector(c%2Cselector))%7Blist.push(c)%3B%7D%7Dreturn%20list%3B%7D%2F**%0A%20%20%20%20%20*%20For%20shadow%20roots%2C%20returns%20the%20currently%20focused%20element%20within%20this%0A%20%20%20%20%20*%20shadow%20root.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BNode%7Cundefined%7D%20Currently%20focused%20element%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'activeElement'%2Cget%3Afunction%20get()%7Bvar%20node%3Dthis.node%3Breturn%20node._activeElement!%3D%3Dundefined%3Fnode._activeElement%3Anode.activeElement%3B%7D%7D%5D)%3Breturn%20DomApi%3B%7D()%3Bfunction%20forwardMethods(proto%2Cmethods)%7Bvar%20_loop%3Dfunction%20_loop(i)%7Bvar%20method%3Dmethods%5Bi%5D%3B%2F*%20eslint-disable%20valid-jsdoc%20*%2Fproto%5Bmethod%5D%3D%2F**%20%40this%20%7BDomApi%7D%20*%2Ffunction()%7Breturn%20this.node%5Bmethod%5D.apply(this.node%2Carguments)%3B%7D%3B%2F*%20eslint-enable%20*%2F%7D%3Bfor(var%20i%3D0%3Bi%3Cmethods.length%3Bi%2B%2B)%7B_loop(i)%3B%7D%7Dfunction%20forwardReadOnlyProperties(proto%2Cproperties)%7Bvar%20_loop2%3Dfunction%20_loop2(i)%7Bvar%20name%3Dproperties%5Bi%5D%3BObject.defineProperty(proto%2Cname%2C%7Bget%3Afunction%20get()%7Bvar%20domApi%3D%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis%3Breturn%20domApi.node%5Bname%5D%3B%7D%2Cconfigurable%3Atrue%7D)%3B%7D%3Bfor(var%20i%3D0%3Bi%3Cproperties.length%3Bi%2B%2B)%7B_loop2(i)%3B%7D%7Dfunction%20forwardProperties(proto%2Cproperties)%7Bvar%20_loop3%3Dfunction%20_loop3(i)%7Bvar%20name%3Dproperties%5Bi%5D%3BObject.defineProperty(proto%2Cname%2C%7Bget%3Afunction%20get()%7Bvar%20domApi%3D%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis%3Breturn%20domApi.node%5Bname%5D%3B%7D%2Cset%3Afunction%20set(value)%7B%2F**%20%40type%20%7BDomApi%7D%20*%2Fthis.node%5Bname%5D%3Dvalue%3B%7D%2Cconfigurable%3Atrue%7D)%3B%7D%3Bfor(var%20i%3D0%3Bi%3Cproperties.length%3Bi%2B%2B)%7B_loop3(i)%3B%7D%7DforwardMethods(DomApi.prototype%2C%5B'cloneNode'%2C'appendChild'%2C'insertBefore'%2C'removeChild'%2C'replaceChild'%2C'setAttribute'%2C'removeAttribute'%2C'querySelector'%2C'querySelectorAll'%5D)%3BforwardReadOnlyProperties(DomApi.prototype%2C%5B'parentNode'%2C'firstChild'%2C'lastChild'%2C'nextSibling'%2C'previousSibling'%2C'firstElementChild'%2C'lastElementChild'%2C'nextElementSibling'%2C'previousElementSibling'%2C'childNodes'%2C'children'%2C'classList'%5D)%3BforwardProperties(DomApi.prototype%2C%5B'textContent'%2C'innerHTML'%5D)%3B%2F**%0A%20%20%20*%20Event%20API%20wrapper%20class%20returned%20from%20%60Polymer.dom.(target)%60%20when%0A%20%20%20*%20%60target%60%20is%20an%20%60Event%60.%0A%20%20%20*%2Fvar%20EventApi%3Dfunction()%7Bfunction%20EventApi(event)%7B_classCallCheck(this%2CEventApi)%3Bthis.event%3Devent%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20first%20node%20on%20the%20%60composedPath%60%20of%20this%20event.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!EventTarget%7D%20The%20node%20this%20event%20was%20dispatched%20to%0A%20%20%20%20%20*%2F_createClass(EventApi%2C%5B%7Bkey%3A'rootTarget'%2Cget%3Afunction%20get()%7Breturn%20this.event.composedPath()%5B0%5D%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20local%20(re-targeted)%20target%20for%20this%20event.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7B!EventTarget%7D%20The%20local%20(re-targeted)%20target%20for%20this%20event.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'localTarget'%2Cget%3Afunction%20get()%7Breturn%20this.event.target%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20%60composedPath%60%20for%20this%20event.%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!EventTarget%3E%7D%20The%20nodes%20this%20event%20propagated%20through%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'path'%2Cget%3Afunction%20get()%7Breturn%20this.event.composedPath()%3B%7D%7D%5D)%3Breturn%20EventApi%3B%7D()%3BPolymer.DomApi%3DDomApi%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20deep%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.cloneNode%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.appendChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20newChild%0A%20%20%20*%20%40param%20%7BNode%7D%20refChild%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.insertBefore%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20node%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.removeChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7B!Node%7D%20oldChild%0A%20%20%20*%20%40param%20%7B!Node%7D%20newChild%0A%20%20%20*%20%40return%20%7B!Node%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.replaceChild%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%0A%20%20%20*%20%40param%20%7Bstring%7D%20value%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.setAttribute%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.removeAttribute%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%0A%20%20%20*%20%40return%20%7B%3FElement%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.querySelector%3B%2F**%0A%20%20%20*%20%40function%0A%20%20%20*%20%40param%20%7Bstring%7D%20selector%0A%20%20%20*%20%40return%20%7B!NodeList%3C!Element%3E%7D%0A%20%20%20*%2FPolymer.DomApi.prototype.querySelectorAll%3B%2F**%0A%20%20%20*%20Legacy%20DOM%20and%20Event%20manipulation%20API%20wrapper%20factory%20used%20to%20abstract%0A%20%20%20*%20differences%20between%20native%20Shadow%20DOM%20and%20%22Shady%20DOM%22%20when%20polyfilling%20on%0A%20%20%20*%20older%20browsers.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20in%20Polymer%202.x%20use%20of%20%60Polymer.dom%60%20is%20no%20longer%20required%20and%0A%20%20%20*%20in%20the%20majority%20of%20cases%20simply%20facades%20directly%20to%20the%20standard%20native%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40summary%20Legacy%20DOM%20and%20Event%20manipulation%20API%20wrapper%20factory%20used%20to%0A%20%20%20*%20abstract%20differences%20between%20native%20Shadow%20DOM%20and%20%22Shady%20DOM.%22%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B(Node%7CEvent)%3D%7D%20obj%20Node%20or%20event%20to%20operate%20on%0A%20%20%20*%20%40return%20%7B!DomApi%7C!EventApi%7D%20Wrapper%20providing%20either%20node%20API%20or%20event%20API%0A%20%20%20*%2FPolymer.dom%3Dfunction(obj)%7Bobj%3Dobj%7C%7Cdocument%3Bif(!obj.__domApi)%7Bvar%20helper%3Dvoid%200%3Bif(obj%20instanceof%20Event)%7Bhelper%3Dnew%20EventApi(obj)%3B%7Delse%7Bhelper%3Dnew%20DomApi(obj)%3B%7Dobj.__domApi%3Dhelper%3B%7Dreturn%20obj.__domApi%3B%7D%3BPolymer.dom.matchesSelector%3DmatchesSelector%3B%2F**%0A%20%20%20*%20Forces%20several%20classes%20of%20asynchronously%20queued%20tasks%20to%20flush%3A%0A%20%20%20*%20-%20Debouncers%20added%20via%20%60Polymer.enqueueDebouncer%60%0A%20%20%20*%20-%20ShadyDOM%20distribution%0A%20%20%20*%0A%20%20%20*%20This%20method%20facades%20to%20%60Polymer.flush%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%2FPolymer.dom.flush%3DPolymer.flush%3B%2F**%0A%20%20%20*%20Adds%20a%20%60Polymer.Debouncer%60%20to%20a%20list%20of%20globally%20flushable%20tasks.%0A%20%20%20*%0A%20%20%20*%20This%20method%20facades%20to%20%60Polymer.enqueueDebouncer%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer.dom%0A%20%20%20*%20%40param%20%7B!Polymer.Debouncer%7D%20debouncer%20Debouncer%20to%20enqueue%0A%20%20%20*%2FPolymer.dom.addDebouncer%3DPolymer.enqueueDebouncer%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Fpolymer.dom.html.js%0A",
            "totalBytes": 11133,
            "wastedBytes": 6186,
            "wastedPercent": 55.56453786041497
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20manipulating%20structured%20data%20path%20strings.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20manipulating%20structured%20data%20path%20strings.%0A%20%20%20*%2Fvar%20Path%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20given%20string%20is%20a%20structured%20data%20path%20(has%20dots).%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isPath('foo.bar.baz')%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isPath('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20string%20contained%20one%20or%20more%20dots%0A%20%20%20%20%20*%2FisPath%3Afunction%20isPath(path)%7Breturn%20path.indexOf('.')%3E%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20root%20property%20name%20for%20the%20given%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.root('foo.bar.baz')%20%2F%2F%20'foo'%0A%20%20%20%20%20*%20Polymer.Path.root('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20'foo'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Root%20property%20name%0A%20%20%20%20%20*%2Froot%3Afunction%20root(path)%7Bvar%20dotIndex%3Dpath.indexOf('.')%3Bif(dotIndex%3D%3D%3D-1)%7Breturn%20path%3B%7Dreturn%20path.slice(0%2CdotIndex)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Given%20%60base%60%20is%20%60foo.bar%60%2C%20%60foo%60%20is%20an%20ancestor%2C%20%60foo.bar%60%20is%20not%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20given%20path%20is%20an%20ancestor%20of%20the%20base%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo')%20%20%20%20%20%20%20%20%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo.bar')%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20Polymer.Path.isAncestor('foo.bar'%2C%20'foo.bar.baz')%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20an%20ancestor%20of%20%60base%60.%0A%20%20%20%20%20*%2FisAncestor%3Afunction%20isAncestor(base%2Cpath)%7B%2F%2F%20%20%20%20%20base.startsWith(path%20%2B%20'.')%3B%0Areturn%20base.indexOf(path%2B'.')%3D%3D%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Given%20%60base%60%20is%20%60foo.bar%60%2C%20%60foo.bar.baz%60%20is%20an%20descendant%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo.bar.baz')%20%2F%2F%20true%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo.bar')%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20Polymer.Path.isDescendant('foo.bar'%2C%20'foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against.%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test.%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20a%20descendant%20of%20%60base%60.%0A%20%20%20%20%20*%2FisDescendant%3Afunction%20isDescendant(base%2Cpath)%7B%2F%2F%20%20%20%20%20path.startsWith(base%20%2B%20'.')%3B%0Areturn%20path.indexOf(base%2B'.')%3D%3D%3D0%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Replaces%20a%20previous%20base%20path%20with%20a%20new%20base%20path%2C%20preserving%20the%0A%20%20%20%20%20*%20remainder%20of%20the%20path.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20User%20must%20ensure%20%60path%60%20has%20a%20prefix%20of%20%60base%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.translate('foo.bar'%2C%20'zot'%2C%20'foo.bar.baz')%20%2F%2F%20'zot.baz'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Current%20base%20string%20to%20remove%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20newBase%20New%20base%20string%20to%20replace%20with%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20to%20translate%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Translated%20string%0A%20%20%20%20%20*%2Ftranslate%3Afunction%20translate(base%2CnewBase%2Cpath)%7Breturn%20newBase%2Bpath.slice(base.length)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20base%20Path%20string%20to%20test%20against%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%20to%20test%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20%60path%60%20is%20equal%20to%20%60base%60%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fmatches%3Afunction%20matches(base%2Cpath)%7Breturn%20base%3D%3D%3Dpath%7C%7Cthis.isAncestor(base%2Cpath)%7C%7Cthis.isDescendant(base%2Cpath)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Converts%20array-based%20paths%20to%20flattened%20path.%20%20String-based%20paths%0A%20%20%20%20%20*%20are%20returned%20as-is.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.normalize(%5B'foo.bar'%2C%200%2C%20'baz'%5D)%20%20%2F%2F%20'foo.bar.0.baz'%0A%20%20%20%20%20*%20Polymer.Path.normalize('foo.bar.0.baz')%20%20%20%20%20%20%20%20%2F%2F%20'foo.bar.0.baz'%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Input%20path%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Flattened%20path%0A%20%20%20%20%20*%2Fnormalize%3Afunction%20normalize(path)%7Bif(Array.isArray(path))%7Bvar%20parts%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Cpath.length%3Bi%2B%2B)%7Bvar%20args%3Dpath%5Bi%5D.toString().split('.')%3Bfor(var%20j%3D0%3Bj%3Cargs.length%3Bj%2B%2B)%7Bparts.push(args%5Bj%5D)%3B%7D%7Dreturn%20parts.join('.')%3B%7Delse%7Breturn%20path%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Splits%20a%20path%20into%20an%20array%20of%20property%20names.%20Accepts%20either%20arrays%0A%20%20%20%20%20*%20of%20path%20parts%20or%20strings.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%20Polymer.Path.split(%5B'foo.bar'%2C%200%2C%20'baz'%5D)%20%20%2F%2F%20%5B'foo'%2C%20'bar'%2C%20'0'%2C%20'baz'%5D%0A%20%20%20%20%20*%20Polymer.Path.split('foo.bar.0.baz')%20%20%20%20%20%20%20%20%2F%2F%20%5B'foo'%2C%20'bar'%2C%20'0'%2C%20'baz'%5D%0A%20%20%20%20%20*%20%60%60%60%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Input%20path%0A%20%20%20%20%20*%20%40return%20%7B!Array%3Cstring%3E%7D%20Array%20of%20path%20parts%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%20%40suppress%20%7BcheckTypes%7D%0A%20%20%20%20%20*%2Fsplit%3Afunction%20split(path)%7Bif(Array.isArray(path))%7Breturn%20this.normalize(path).split('.')%3B%7Dreturn%20path.toString().split('.')%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Reads%20a%20value%20from%20a%20path.%20%20If%20any%20sub-property%20in%20the%20path%20is%20%60undefined%60%2C%0A%20%20%20%20%20*%20this%20method%20returns%20%60undefined%60%20(will%20never%20throw.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20root%20Object%20from%20which%20to%20dereference%20path%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20read%0A%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20info%20If%20an%20object%20is%20provided%20to%20%60info%60%2C%20the%20normalized%0A%20%20%20%20%20*%20%20(flattened)%20path%20will%20be%20set%20to%20%60info.path%60.%0A%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20path%2C%20or%20%60undefined%60%20if%20the%20path%20could%20not%20be%0A%20%20%20%20%20*%20%20fully%20dereferenced.%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fget%3Afunction%20get(root%2Cpath%2Cinfo)%7Bvar%20prop%3Droot%3Bvar%20parts%3Dthis.split(path)%3B%2F%2F%20Loop%20over%20path%20parts%5B0..n-1%5D%20and%20dereference%0Afor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bif(!prop)%7Breturn%3B%7Dvar%20part%3Dparts%5Bi%5D%3Bprop%3Dprop%5Bpart%5D%3B%7Dif(info)%7Binfo.path%3Dparts.join('.')%3B%7Dreturn%20prop%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Sets%20a%20value%20to%20a%20path.%20%20If%20any%20sub-property%20in%20the%20path%20is%20%60undefined%60%2C%0A%20%20%20%20%20*%20this%20method%20will%20no-op.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20%20%20*%20%40param%20%7BObject%7D%20root%20Object%20from%20which%20to%20dereference%20path%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20to%20path%0A%20%20%20%20%20*%20%40return%20%7Bstring%20%7C%20undefined%7D%20The%20normalized%20version%20of%20the%20input%20path%0A%20%20%20%20%20*%20%40this%20%7BPath%7D%0A%20%20%20%20%20*%2Fset%3Afunction%20set(root%2Cpath%2Cvalue)%7Bvar%20prop%3Droot%3Bvar%20parts%3Dthis.split(path)%3Bvar%20last%3Dparts%5Bparts.length-1%5D%3Bif(parts.length%3E1)%7B%2F%2F%20Loop%20over%20path%20parts%5B0..n-2%5D%20and%20dereference%0Afor(var%20i%3D0%3Bi%3Cparts.length-1%3Bi%2B%2B)%7Bvar%20part%3Dparts%5Bi%5D%3Bprop%3Dprop%5Bpart%5D%3Bif(!prop)%7Breturn%3B%7D%7D%2F%2F%20Set%20value%20to%20object%20at%20end%20of%20path%0Aprop%5Blast%5D%3Dvalue%3B%7Delse%7B%2F%2F%20Simple%20property%20set%0Aprop%5Bpath%5D%3Dvalue%3B%7Dreturn%20parts.join('.')%3B%7D%7D%3B%2F**%0A%20%20%20*%20Returns%20true%20if%20the%20given%20string%20is%20a%20structured%20data%20path%20(has%20dots).%0A%20%20%20*%0A%20%20%20*%20This%20function%20is%20deprecated.%20%20Use%20%60Polymer.Path.isPath%60%20instead.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20Polymer.Path.isDeep('foo.bar.baz')%20%2F%2F%20true%0A%20%20%20*%20Polymer.Path.isDeep('foo')%20%20%20%20%20%20%20%20%20%2F%2F%20false%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40deprecated%0A%20%20%20*%20%40memberof%20Polymer.Path%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20string%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20string%20contained%20one%20or%20more%20dots%0A%20%20%20*%2FPath.isDeep%3DPath.isPath%3BPolymer.Path%3DPath%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fpath.html.js%0A",
            "totalBytes": 7136,
            "wastedBytes": 5696,
            "wastedPercent": 79.82062780269058
          },
          {
            "url": "data:text/javascript;charset=utf-8,function%20_toConsumableArray(arr)%7Bif(Array.isArray(arr))%7Bfor(var%20i%3D0%2Carr2%3DArray(arr.length)%3Bi%3Carr.length%3Bi%2B%2B)%7Barr2%5Bi%5D%3Darr%5Bi%5D%3B%7Dreturn%20arr2%3B%7Delse%7Breturn%20Array.from(arr)%3B%7D%7D(function()%7B'use%20strict'%3Bvar%20MODULE_STYLE_LINK_SELECTOR%3D'link%5Brel%3Dimport%5D%5Btype~%3Dcss%5D'%3Bvar%20INCLUDE_ATTR%3D'include'%3Bvar%20SHADY_UNSCOPED_ATTR%3D'shady-unscoped'%3Bfunction%20importModule(moduleId)%7Bvar%2F**%20Polymer.DomModule%20*%2FPolymerDomModule%3DcustomElements.get('dom-module')%3Bif(!PolymerDomModule)%7Breturn%20null%3B%7Dreturn%20PolymerDomModule.import(moduleId)%3B%7Dfunction%20styleForImport(importDoc)%7B%2F%2F%20NOTE%3A%20polyfill%20affordance.%0A%2F%2F%20under%20the%20HTMLImports%20polyfill%2C%20there%20will%20be%20no%20'body'%2C%0A%2F%2F%20but%20the%20import%20pseudo-doc%20can%20be%20used%20directly.%0Avar%20container%3DimportDoc.body%3FimportDoc.body%3AimportDoc%3Bvar%20importCss%3DPolymer.ResolveUrl.resolveCss(container.textContent%2CimportDoc.baseURI)%3Bvar%20style%3Ddocument.createElement('style')%3Bstyle.textContent%3DimportCss%3Breturn%20style%3B%7D%2F**%20%40typedef%20%7B%7Bassetpath%3A%20string%7D%7D%20*%2Fvar%20templateWithAssetPath%3Dvoid%200%3B%2F%2F%20eslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Module%20with%20utilities%20for%20collection%20CSS%20text%20from%20%60%3Ctemplates%3E%60%2C%20external%0A%20%20%20*%20stylesheets%2C%20and%20%60dom-module%60s.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20with%20utilities%20for%20collection%20CSS%20text%20from%20various%20sources.%0A%20%20%20*%2Fvar%20StyleGather%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20in%20a%20space-separated%20list%20of%20%60dom-module%60s.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleIds%20List%20of%20dom-module%20id's%20within%20which%20to%0A%20%20%20%20%20*%20search%20for%20css.%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20%3Cstyle%3E%20elements%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModules%3Afunction%20stylesFromModules(moduleIds)%7Bvar%20modules%3DmoduleIds.trim().split(%2F%5Cs%2B%2F)%3Bvar%20styles%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Cmodules.length%3Bi%2B%2B)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromModule(modules%5Bi%5D)))%3B%7Dreturn%20styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20in%20a%20given%20%60dom-module%60.%0A%20%20%20%20%20*%20Styles%20in%20a%20%60dom-module%60%20can%20come%20either%20from%20%60%3Cstyle%3E%60s%20within%20the%0A%20%20%20%20%20*%20first%20%60%3Ctemplate%3E%60%2C%20or%20else%20from%20one%20or%20more%0A%20%20%20%20%20*%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20outside%20the%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20dom-module%20id%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles.%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModule%3Afunction%20stylesFromModule(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Bif(!m)%7Bconsole.warn('Could%20not%20find%20style%20data%20in%20module%20named'%2CmoduleId)%3Breturn%5B%5D%3B%7Dif(m._styles%3D%3D%3Dundefined)%7Bvar%20styles%3D%5B%5D%3B%2F%2F%20module%20imports%3A%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%0Astyles.push.apply(styles%2C_toConsumableArray(this._stylesFromModuleImports(m)))%3B%2F%2F%20include%20css%20from%20the%20first%20template%20in%20the%20module%0Avar%20template%3Dm.querySelector('template')%3Bif(template)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromTemplate(template%2C%2F**%20%40type%20%7BtemplateWithAssetPath%7D%20*%2Fm.assetpath)))%3B%7Dm._styles%3Dstyles%3B%7Dreturn%20m._styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20%60%3Cstyle%3E%60%20elements%20within%20a%20given%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20baseURI%20for%20style%20content%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20styles%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromTemplate%3Afunction%20stylesFromTemplate(template%2CbaseURI)%7Bif(!template._styles)%7Bvar%20styles%3D%5B%5D%3B%2F%2F%20if%20element%20is%20a%20template%2C%20get%20content%20from%20its%20.content%0Avar%20e%24%3Dtemplate.content.querySelectorAll('style')%3Bfor(var%20i%3D0%3Bi%3Ce%24.length%3Bi%2B%2B)%7Bvar%20e%3De%24%5Bi%5D%3B%2F%2F%20support%20style%20sharing%20by%20allowing%20styles%20to%20%22include%22%0A%2F%2F%20other%20dom-modules%20that%20contain%20styling%0Avar%20include%3De.getAttribute(INCLUDE_ATTR)%3Bif(include)%7Bstyles.push.apply(styles%2C_toConsumableArray(this.stylesFromModules(include).filter(function(item%2Cindex%2Cself)%7Breturn%20self.indexOf(item)%3D%3D%3Dindex%3B%7D)))%3B%7Dif(baseURI)%7Be.textContent%3DPolymer.ResolveUrl.resolveCss(e.textContent%2CbaseURI)%3B%7Dstyles.push(e)%3B%7Dtemplate._styles%3Dstyles%3B%7Dreturn%20template._styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20a%20list%20of%20%3Cstyle%3E%20elements%20%20from%20stylesheets%20loaded%20via%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20within%20the%20specified%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20Id%20of%20%60dom-module%60%20to%20gather%20CSS%20from%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles.%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FstylesFromModuleImports%3Afunction%20stylesFromModuleImports(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Breturn%20m%3Fthis._stylesFromModuleImports(m)%3A%5B%5D%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20module%20dom-module%20element%20that%20could%20contain%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20styles%0A%20%20%20%20%20*%20%40return%20%7B!Array%3C!HTMLStyleElement%3E%7D%20Array%20of%20contained%20styles%0A%20%20%20%20%20*%2F_stylesFromModuleImports%3Afunction%20_stylesFromModuleImports(module)%7Bvar%20styles%3D%5B%5D%3Bvar%20p%24%3Dmodule.querySelectorAll(MODULE_STYLE_LINK_SELECTOR)%3Bfor(var%20i%3D0%3Bi%3Cp%24.length%3Bi%2B%2B)%7Bvar%20p%3Dp%24%5Bi%5D%3Bif(p.import)%7Bvar%20importDoc%3Dp.import%3Bvar%20unscoped%3Dp.hasAttribute(SHADY_UNSCOPED_ATTR)%3Bif(unscoped%26%26!importDoc._unscopedStyle)%7Bvar%20style%3DstyleForImport(importDoc)%3Bstyle.setAttribute(SHADY_UNSCOPED_ATTR%2C'')%3BimportDoc._unscopedStyle%3Dstyle%3B%7Delse%20if(!importDoc._style)%7BimportDoc._style%3DstyleForImport(importDoc)%3B%7Dstyles.push(unscoped%3FimportDoc._unscopedStyle%3AimportDoc._style)%3B%7D%7Dreturn%20styles%3B%7D%2C%2F**%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20styles%20in%20a%20space-separated%20list%20of%20%60dom-module%60s.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60stylesFromModules%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleIds%20List%20of%20dom-module%20id's%20within%20which%20to%0A%20%20%20%20%20*%20search%20for%20css.%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20%60dom-module%60s%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModules%3Afunction%20cssFromModules(moduleIds)%7Bvar%20modules%3DmoduleIds.trim().split(%2F%5Cs%2B%2F)%3Bvar%20cssText%3D''%3Bfor(var%20i%3D0%3Bi%3Cmodules.length%3Bi%2B%2B)%7BcssText%2B%3Dthis.cssFromModule(modules%5Bi%5D)%3B%7Dreturn%20cssText%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20styles%20in%20a%20given%20%60dom-module%60.%20%20CSS%20in%20a%20%60dom-module%60%0A%20%20%20%20%20*%20can%20come%20either%20from%20%60%3Cstyle%3E%60s%20within%20the%20first%20%60%3Ctemplate%3E%60%2C%20or%20else%0A%20%20%20%20%20*%20from%20one%20or%20more%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20links%20outside%20the%0A%20%20%20%20%20*%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20%60%3Cstyles%3E%60%20processed%20are%20removed%20from%20their%20original%20location.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60styleFromModule%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20dom-module%20id%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20%60dom-module%60%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModule%3Afunction%20cssFromModule(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Bif(m%26%26m._cssText%3D%3D%3Dundefined)%7B%2F%2F%20module%20imports%3A%20%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%0Avar%20cssText%3Dthis._cssFromModuleImports(m)%3B%2F%2F%20include%20css%20from%20the%20first%20template%20in%20the%20module%0Avar%20t%3Dm.querySelector('template')%3Bif(t)%7BcssText%2B%3Dthis.cssFromTemplate(t%2C%2F**%20%40type%20%7BtemplateWithAssetPath%7D%20*%2Fm.assetpath)%3B%7Dm._cssText%3DcssText%7C%7Cnull%3B%7Dif(!m)%7Bconsole.warn('Could%20not%20find%20style%20data%20in%20module%20named'%2CmoduleId)%3B%7Dreturn%20m%26%26m._cssText%7C%7C''%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20of%20%60%3Cstyles%3E%60%20within%20a%20given%20template.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20%60%3Cstyles%3E%60%20processed%20are%20removed%20from%20their%20original%20location.%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60styleFromTemplate%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20gather%20styles%20from%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20baseURI%20Base%20URI%20to%20resolve%20the%20URL%20against%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20specified%20template%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromTemplate%3Afunction%20cssFromTemplate(template%2CbaseURI)%7Bvar%20cssText%3D''%3Bvar%20e%24%3Dthis.stylesFromTemplate(template%2CbaseURI)%3B%2F%2F%20if%20element%20is%20a%20template%2C%20get%20content%20from%20its%20.content%0Afor(var%20i%3D0%3Bi%3Ce%24.length%3Bi%2B%2B)%7Bvar%20e%3De%24%5Bi%5D%3Bif(e.parentNode)%7Be.parentNode.removeChild(e)%3B%7DcssText%2B%3De.textContent%3B%7Dreturn%20cssText%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Returns%20CSS%20text%20from%20stylesheets%20loaded%20via%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%0A%20%20%20%20%20*%20links%20within%20the%20specified%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20This%20method%20is%20deprecated%2C%20use%20%60stylesFromModuleImports%60%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20moduleId%20Id%20of%20%60dom-module%60%20to%20gather%20CSS%20from%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20links%20in%20specified%20%60dom-module%60%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%2FcssFromModuleImports%3Afunction%20cssFromModuleImports(moduleId)%7Bvar%20m%3DimportModule(moduleId)%3Breturn%20m%3Fthis._cssFromModuleImports(m)%3A''%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40deprecated%0A%20%20%20%20%20*%20%40memberof%20Polymer.StyleGather%0A%20%20%20%20%20*%20%40this%20%7BStyleGather%7D%0A%20%20%20%20%20*%20%40param%20%7B!HTMLElement%7D%20module%20dom-module%20element%20that%20could%20contain%20%60%3Clink%20rel%3D%22import%22%20type%3D%22css%22%3E%60%20styles%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Concatenated%20CSS%20content%20from%20links%20in%20the%20dom-module%0A%20%20%20%20%20*%2F_cssFromModuleImports%3Afunction%20_cssFromModuleImports(module)%7Bvar%20cssText%3D''%3Bvar%20styles%3Dthis._stylesFromModuleImports(module)%3Bfor(var%20i%3D0%3Bi%3Cstyles.length%3Bi%2B%2B)%7BcssText%2B%3Dstyles%5Bi%5D.textContent%3B%7Dreturn%20cssText%3B%7D%7D%3BPolymer.StyleGather%3DStyleGather%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fstyle-gather.html.js%0A",
            "totalBytes": 9256,
            "wastedBytes": 5380,
            "wastedPercent": 58.12445980985307
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Returns%20true%20if%20%60node%60%20is%20a%20slot%20element%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20test.%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20given%20%60node%60%20is%20a%20slot%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20isSlot(node)%7Breturn%20node.localName%3D%3D%3D'slot'%3B%7D%2F**%0A%20%20%20*%20Class%20that%20listens%20for%20changes%20(additions%20or%20removals)%20to%0A%20%20%20*%20%22flattened%20nodes%22%20on%20a%20given%20%60node%60.%20The%20list%20of%20flattened%20nodes%20consists%0A%20%20%20*%20of%20a%20node's%20children%20and%2C%20for%20any%20children%20that%20are%20%60%3Cslot%3E%60%20elements%2C%0A%20%20%20*%20the%20expanded%20flattened%20list%20of%20%60assignedNodes%60.%0A%20%20%20*%20For%20example%2C%20if%20the%20observed%20node%20has%20children%20%60%3Ca%3E%3C%2Fa%3E%3Cslot%3E%3C%2Fslot%3E%3Cb%3E%3C%2Fb%3E%60%0A%20%20%20*%20and%20the%20%60%3Cslot%3E%60%20has%20one%20%60%3Cdiv%3E%60%20assigned%20to%20it%2C%20then%20the%20flattened%0A%20%20%20*%20nodes%20list%20is%20%60%3Ca%3E%3C%2Fa%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cb%3E%3C%2Fb%3E%60.%20If%20the%20%60%3Cslot%3E%60%20has%20other%0A%20%20%20*%20%60%3Cslot%3E%60%20elements%20assigned%20to%20it%2C%20these%20are%20flattened%20as%20well.%0A%20%20%20*%0A%20%20%20*%20The%20provided%20%60callback%60%20is%20called%20whenever%20any%20change%20to%20this%20list%0A%20%20%20*%20of%20flattened%20nodes%20occurs%2C%20where%20an%20addition%20or%20removal%20of%20a%20node%20is%0A%20%20%20*%20considered%20a%20change.%20The%20%60callback%60%20is%20called%20with%20one%20argument%2C%20an%20object%0A%20%20%20*%20containing%20an%20array%20of%20any%20%60addedNodes%60%20and%20%60removedNodes%60.%0A%20%20%20*%0A%20%20%20*%20Note%3A%20the%20callback%20is%20called%20asynchronous%20to%20any%20changes%0A%20%20%20*%20at%20a%20microtask%20checkpoint.%20This%20is%20because%20observation%20is%20performed%20using%0A%20%20%20*%20%60MutationObserver%60%20and%20the%20%60%3Cslot%3E%60%20element's%20%60slotchange%60%20event%20which%0A%20%20%20*%20are%20asynchronous.%0A%20%20%20*%0A%20%20%20*%20An%20example%3A%0A%20%20%20*%20%60%60%60js%0A%20%20%20*%20class%20TestSelfObserve%20extends%20Polymer.Element%20%7B%0A%20%20%20*%20%20%20static%20get%20is()%20%7B%20return%20'test-self-observe'%3B%7D%0A%20%20%20*%20%20%20connectedCallback()%20%7B%0A%20%20%20*%20%20%20%20%20super.connectedCallback()%3B%0A%20%20%20*%20%20%20%20%20this._observer%20%3D%20new%20Polymer.FlattenedNodesObserver(this%2C%20(info)%20%3D%3E%20%7B%0A%20%20%20*%20%20%20%20%20%20%20this.info%20%3D%20info%3B%0A%20%20%20*%20%20%20%20%20%7D)%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%20%20disconnectedCallback()%20%7B%0A%20%20%20*%20%20%20%20%20super.disconnectedCallback()%3B%0A%20%20%20*%20%20%20%20%20this._observer.disconnect()%3B%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%20%7D%0A%20%20%20*%20customElements.define(TestSelfObserve.is%2C%20TestSelfObserve)%3B%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Class%20that%20listens%20for%20changes%20(additions%20or%20removals)%20to%0A%20%20%20*%20%22flattened%20nodes%22%20on%20a%20given%20%60node%60.%0A%20%20%20*%2Fvar%20FlattenedNodesObserver%3Dfunction()%7B_createClass(FlattenedNodesObserver%2Cnull%2C%5B%7Bkey%3A'getFlattenedNodes'%2C%2F**%0A%20%20%20%20%20*%20Returns%20the%20list%20of%20flattened%20nodes%20for%20the%20given%20%60node%60.%0A%20%20%20%20%20*%20This%20list%20consists%20of%20a%20node's%20children%20and%2C%20for%20any%20children%0A%20%20%20%20%20*%20that%20are%20%60%3Cslot%3E%60%20elements%2C%20the%20expanded%20flattened%20list%20of%20%60assignedNodes%60.%0A%20%20%20%20%20*%20For%20example%2C%20if%20the%20observed%20node%20has%20children%20%60%3Ca%3E%3C%2Fa%3E%3Cslot%3E%3C%2Fslot%3E%3Cb%3E%3C%2Fb%3E%60%0A%20%20%20%20%20*%20and%20the%20%60%3Cslot%3E%60%20has%20one%20%60%3Cdiv%3E%60%20assigned%20to%20it%2C%20then%20the%20flattened%0A%20%20%20%20%20*%20nodes%20list%20is%20%60%3Ca%3E%3C%2Fa%3E%3Cdiv%3E%3C%2Fdiv%3E%3Cb%3E%3C%2Fb%3E%60.%20If%20the%20%60%3Cslot%3E%60%20has%20other%0A%20%20%20%20%20*%20%60%3Cslot%3E%60%20elements%20assigned%20to%20it%2C%20these%20are%20flattened%20as%20well.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BHTMLElement%7CHTMLSlotElement%7D%20node%20The%20node%20for%20which%20to%20return%20the%20list%20of%20flattened%20nodes.%0A%20%20%20%20%20*%20%40return%20%7BArray%7D%20The%20list%20of%20flattened%20nodes%20for%20the%20given%20%60node%60.%0A%20%20%20%20*%2Fvalue%3Afunction%20getFlattenedNodes(node)%7Bif(isSlot(node))%7Bnode%3D%2F**%20%40type%20%7BHTMLSlotElement%7D%20*%2Fnode%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20node.assignedNodes(%7Bflatten%3Atrue%7D)%3B%7Delse%7Breturn%20Array.from(node.childNodes).map(function(node)%7Bif(isSlot(node))%7Bnode%3D%2F**%20%40type%20%7BHTMLSlotElement%7D%20*%2Fnode%3B%2F%2F%20eslint-disable-line%20no-self-assign%0Areturn%20node.assignedNodes(%7Bflatten%3Atrue%7D)%3B%7Delse%7Breturn%5Bnode%5D%3B%7D%7D).reduce(function(a%2Cb)%7Breturn%20a.concat(b)%3B%7D%2C%5B%5D)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BElement%7D%20target%20Node%20on%20which%20to%20listen%20for%20changes.%0A%20%20%20%20%20*%20%40param%20%7B%3Ffunction(!Element%2C%20%7B%20target%3A%20!Element%2C%20addedNodes%3A%20!Array%3C!Element%3E%2C%20removedNodes%3A%20!Array%3C!Element%3E%20%7D)%3Avoid%7D%20callback%20Function%20called%20when%20there%20are%20additions%0A%20%20%20%20%20*%20or%20removals%20from%20the%20target's%20list%20of%20flattened%20nodes.%0A%20%20%20%20*%2F%7D%5D)%3Bfunction%20FlattenedNodesObserver(target%2Ccallback)%7Bvar%20_this%3Dthis%3B_classCallCheck(this%2CFlattenedNodesObserver)%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BMutationObserver%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._shadyChildrenObserver%3Dnull%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BMutationObserver%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._nativeChildrenObserver%3Dnull%3Bthis._connected%3Dfalse%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7BElement%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._target%3Dtarget%3Bthis.callback%3Dcallback%3Bthis._effectiveNodes%3D%5B%5D%3Bthis._observer%3Dnull%3Bthis._scheduled%3Dfalse%3B%2F**%0A%20%20%20%20%20%20%20*%20%40type%20%7Bfunction()%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fthis._boundSchedule%3Dfunction()%7B_this._schedule()%3B%7D%3Bthis.connect()%3Bthis._schedule()%3B%7D%2F**%0A%20%20%20%20%20*%20Activates%20an%20observer.%20This%20method%20is%20automatically%20called%20when%0A%20%20%20%20%20*%20a%20%60FlattenedNodesObserver%60%20is%20created.%20It%20should%20only%20be%20called%20to%0A%20%20%20%20%20*%20re-activate%20an%20observer%20that%20has%20been%20deactivated%20via%20the%20%60disconnect%60%20method.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(FlattenedNodesObserver%2C%5B%7Bkey%3A'connect'%2Cvalue%3Afunction%20connect()%7Bvar%20_this2%3Dthis%3Bif(isSlot(this._target))%7Bthis._listenSlots(%5Bthis._target%5D)%3B%7Delse%20if(this._target.children)%7Bthis._listenSlots(this._target.children)%3Bif(window.ShadyDOM)%7Bthis._shadyChildrenObserver%3DShadyDOM.observeChildren(this._target%2Cfunction(mutations)%7B_this2._processMutations(mutations)%3B%7D)%3B%7Delse%7Bthis._nativeChildrenObserver%3Dnew%20MutationObserver(function(mutations)%7B_this2._processMutations(mutations)%3B%7D)%3Bthis._nativeChildrenObserver.observe(this._target%2C%7BchildList%3Atrue%7D)%3B%7D%7Dthis._connected%3Dtrue%3B%7D%2F**%0A%20%20%20%20%20*%20Deactivates%20the%20flattened%20nodes%20observer.%20After%20calling%20this%20method%0A%20%20%20%20%20*%20the%20observer%20callback%20will%20not%20be%20called%20when%20changes%20to%20flattened%20nodes%0A%20%20%20%20%20*%20occur.%20The%20%60connect%60%20method%20may%20be%20subsequently%20called%20to%20reactivate%0A%20%20%20%20%20*%20the%20observer.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnect'%2Cvalue%3Afunction%20disconnect()%7Bif(isSlot(this._target))%7Bthis._unlistenSlots(%5Bthis._target%5D)%3B%7Delse%20if(this._target.children)%7Bthis._unlistenSlots(this._target.children)%3Bif(window.ShadyDOM%26%26this._shadyChildrenObserver)%7BShadyDOM.unobserveChildren(this._shadyChildrenObserver)%3Bthis._shadyChildrenObserver%3Dnull%3B%7Delse%20if(this._nativeChildrenObserver)%7Bthis._nativeChildrenObserver.disconnect()%3Bthis._nativeChildrenObserver%3Dnull%3B%7D%7Dthis._connected%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_schedule'%2Cvalue%3Afunction%20_schedule()%7Bvar%20_this3%3Dthis%3Bif(!this._scheduled)%7Bthis._scheduled%3Dtrue%3BPolymer.Async.microTask.run(function()%7Breturn%20_this3.flush()%3B%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%3CMutationRecord%3E%7D%20mutations%20Mutations%20signaled%20by%20the%20mutation%20observer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_processMutations'%2Cvalue%3Afunction%20_processMutations(mutations)%7Bthis._processSlotMutations(mutations)%3Bthis.flush()%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7BArray%3CMutationRecord%3E%7D%20mutations%20Mutations%20signaled%20by%20the%20mutation%20observer%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_processSlotMutations'%2Cvalue%3Afunction%20_processSlotMutations(mutations)%7Bif(mutations)%7Bfor(var%20i%3D0%3Bi%3Cmutations.length%3Bi%2B%2B)%7Bvar%20mutation%3Dmutations%5Bi%5D%3Bif(mutation.addedNodes)%7Bthis._listenSlots(mutation.addedNodes)%3B%7Dif(mutation.removedNodes)%7Bthis._unlistenSlots(mutation.removedNodes)%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20*%20Flushes%20the%20observer%20causing%20any%20pending%20changes%20to%20be%20immediately%0A%20%20%20%20%20*%20delivered%20the%20observer%20callback.%20By%20default%20these%20changes%20are%20delivered%0A%20%20%20%20%20*%20asynchronously%20at%20the%20next%20microtask%20checkpoint.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20any%20pending%20changes%20caused%20the%20observer%0A%20%20%20%20%20*%20callback%20to%20run.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flush'%2Cvalue%3Afunction%20flush()%7Bif(!this._connected)%7Breturn%20false%3B%7Dif(window.ShadyDOM)%7BShadyDOM.flush()%3B%7Dif(this._nativeChildrenObserver)%7Bthis._processSlotMutations(this._nativeChildrenObserver.takeRecords())%3B%7Delse%20if(this._shadyChildrenObserver)%7Bthis._processSlotMutations(this._shadyChildrenObserver.takeRecords())%3B%7Dthis._scheduled%3Dfalse%3Bvar%20info%3D%7Btarget%3Athis._target%2CaddedNodes%3A%5B%5D%2CremovedNodes%3A%5B%5D%7D%3Bvar%20newNodes%3Dthis.constructor.getFlattenedNodes(this._target)%3Bvar%20splices%3DPolymer.ArraySplice.calculateSplices(newNodes%2Cthis._effectiveNodes)%3B%2F%2F%20process%20removals%0Afor(var%20i%3D0%2Cs%3Bi%3Csplices.length%26%26(s%3Dsplices%5Bi%5D)%3Bi%2B%2B)%7Bfor(var%20j%3D0%2Cn%3Bj%3Cs.removed.length%26%26(n%3Ds.removed%5Bj%5D)%3Bj%2B%2B)%7Binfo.removedNodes.push(n)%3B%7D%7D%2F%2F%20process%20adds%0Afor(var%20_i%3D0%2C_s%3B_i%3Csplices.length%26%26(_s%3Dsplices%5B_i%5D)%3B_i%2B%2B)%7Bfor(var%20_j%3D_s.index%3B_j%3C_s.index%2B_s.addedCount%3B_j%2B%2B)%7Binfo.addedNodes.push(newNodes%5B_j%5D)%3B%7D%7D%2F%2F%20update%20cache%0Athis._effectiveNodes%3DnewNodes%3Bvar%20didFlush%3Dfalse%3Bif(info.addedNodes.length%7C%7Cinfo.removedNodes.length)%7BdidFlush%3Dtrue%3Bthis.callback.call(this._target%2Cinfo)%3B%7Dreturn%20didFlush%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Array%3CElement%7CNode%3E%7C!NodeList%3CNode%3E%7D%20nodeList%20Nodes%20that%20could%20change%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_listenSlots'%2Cvalue%3Afunction%20_listenSlots(nodeList)%7Bfor(var%20i%3D0%3Bi%3CnodeList.length%3Bi%2B%2B)%7Bvar%20n%3DnodeList%5Bi%5D%3Bif(isSlot(n))%7Bn.addEventListener('slotchange'%2Cthis._boundSchedule)%3B%7D%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Array%3CElement%7CNode%3E%7C!NodeList%3CNode%3E%7D%20nodeList%20Nodes%20that%20could%20change%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_unlistenSlots'%2Cvalue%3Afunction%20_unlistenSlots(nodeList)%7Bfor(var%20i%3D0%3Bi%3CnodeList.length%3Bi%2B%2B)%7Bvar%20n%3DnodeList%5Bi%5D%3Bif(isSlot(n))%7Bn.removeEventListener('slotchange'%2Cthis._boundSchedule)%3B%7D%7D%7D%7D%5D)%3Breturn%20FlattenedNodesObserver%3B%7D()%3BPolymer.FlattenedNodesObserver%3DFlattenedNodesObserver%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fflattened-nodes-observer.html.js%0A",
            "totalBytes": 9727,
            "wastedBytes": 5142,
            "wastedPercent": 52.863164387786576
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20TemplateInstanceBase%3DPolymer.TemplateInstanceBase%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20%20%20*%20%20%20_templatizerTemplate%3A%20HTMLTemplateElement%2C%0A%20%20%20%20%20*%20%20%20_parentModel%3A%20boolean%2C%0A%20%20%20%20%20*%20%20%20_instanceProps%3A%20Object%2C%0A%20%20%20%20%20*%20%20%20_forwardHostPropV2%3A%20Function%2C%0A%20%20%20%20%20*%20%20%20_notifyInstancePropV2%3A%20Function%2C%0A%20%20%20%20%20*%20%20%20ctor%3A%20TemplateInstanceBase%0A%20%20%20%20%20*%20%7D%7D%0A%20%20%20%20%20*%2Fvar%20TemplatizerUser%3Dvoid%200%3B%2F%2F%20eslint-disable-line%0A%2F**%0A%20%20%20%20%20*%20The%20%60Polymer.Templatizer%60%20behavior%20adds%20methods%20to%20generate%20instances%20of%0A%20%20%20%20%20*%20templates%20that%20are%20each%20managed%20by%20an%20anonymous%20%60Polymer.PropertyEffects%60%0A%20%20%20%20%20*%20instance%20where%20data-bindings%20in%20the%20stamped%20template%20content%20are%20bound%20to%0A%20%20%20%20%20*%20accessors%20on%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20behavior%20is%20provided%20in%20Polymer%202.x%20as%20a%20hybrid-element%20convenience%0A%20%20%20%20%20*%20only.%20%20For%20non-hybrid%20usage%2C%20the%20%60Polymer.Templatize%60%20library%0A%20%20%20%20%20*%20should%20be%20used%20instead.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Get%20a%20template%20from%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20let%20template%20%3D%20this.querySelector('template')%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Prepare%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20this.templatize(template)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Instance%20the%20template%20with%20an%20initial%20data%20model%0A%20%20%20%20%20*%20%20%20%20%20let%20instance%20%3D%20this.stamp(%7BmyProp%3A%20'initial'%7D)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Insert%20the%20instance's%20DOM%20somewhere%2C%20e.g.%20light%20DOM%0A%20%20%20%20%20*%20%20%20%20%20Polymer.dom(this).appendChild(instance.root)%3B%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20Changing%20a%20property%20on%20the%20instance%20will%20propagate%20to%20bindings%0A%20%20%20%20%20*%20%20%20%20%20%2F%2F%20in%20the%20template%0A%20%20%20%20%20*%20%20%20%20%20instance.myProp%20%3D%20'new%20value'%3B%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Users%20of%20%60Templatizer%60%20may%20need%20to%20implement%20the%20following%20abstract%0A%20%20%20%20%20*%20API's%20to%20determine%20how%20properties%20and%20paths%20from%20the%20host%20should%20be%0A%20%20%20%20%20*%20forwarded%20into%20to%20instances%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_forwardHostPropV2%3A%20function(prop%2C%20value)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Likewise%2C%20users%20may%20implement%20these%20additional%20abstract%20API's%20to%20determine%0A%20%20%20%20%20*%20how%20instance-specific%20properties%20that%20change%20on%20the%20instance%20should%20be%0A%20%20%20%20%20*%20forwarded%20out%20to%20the%20host%2C%20if%20necessary.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_notifyInstancePropV2%3A%20function(inst%2C%20prop%2C%20value)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20In%20order%20to%20determine%20which%20properties%20are%20instance-specific%20and%20require%0A%20%20%20%20%20*%20custom%20notification%20via%20%60_notifyInstanceProp%60%2C%20define%20an%20%60_instanceProps%60%0A%20%20%20%20%20*%20object%20containing%20keys%20for%20each%20instance%20prop%2C%20for%20example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_instanceProps%3A%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20item%3A%20true%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20index%3A%20true%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Any%20properties%20used%20in%20the%20template%20that%20are%20not%20defined%20in%20_instanceProp%0A%20%20%20%20%20*%20will%20be%20forwarded%20out%20to%20the%20Templatize%20%60owner%60%20automatically.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Users%20may%20also%20implement%20the%20following%20abstract%20function%20to%20show%20or%0A%20%20%20%20%20*%20hide%20any%20DOM%20generated%20using%20%60stamp%60%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20_showHideChildren%3A%20function(shouldHide)%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20some%20callbacks%20are%20suffixed%20with%20%60V2%60%20in%20the%20Polymer%202.x%20behavior%0A%20%20%20%20%20*%20as%20the%20implementations%20will%20need%20to%20differ%20from%20the%20callbacks%20required%0A%20%20%20%20%20*%20by%20the%201.x%20Templatizer%20API%20due%20to%20changes%20in%20the%20%60TemplateInstance%60%20API%0A%20%20%20%20%20*%20between%20versions%201.x%20and%202.x.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40polymerBehavior%0A%20%20%20%20%20*%2FPolymer.Templatizer%3D%7B%2F**%0A%20%20%20%20%20%20%20*%20Generates%20an%20anonymous%20%60TemplateInstance%60%20class%20(stored%20as%20%60this.ctor%60)%0A%20%20%20%20%20%20%20*%20for%20the%20provided%20template.%20%20This%20method%20should%20be%20called%20once%20per%0A%20%20%20%20%20%20%20*%20template%20to%20prepare%20an%20element%20for%20stamping%20the%20template%2C%20followed%0A%20%20%20%20%20%20%20*%20by%20%60stamp%60%20to%20create%20new%20instances%20of%20the%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20prepare%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20mutableData%20When%20%60true%60%2C%20the%20generated%20class%20will%20skip%0A%20%20%20%20%20%20%20*%20%20%20strict%20dirty-checking%20for%20objects%20and%20arrays%20(always%20consider%20them%20to%0A%20%20%20%20%20%20%20*%20%20%20be%20%22dirty%22).%20Defaults%20to%20false.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2Ftemplatize%3Afunction%20templatize(template%2CmutableData)%7Bthis._templatizerTemplate%3Dtemplate%3Bthis.ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7BmutableData%3ABoolean(mutableData)%2CparentModel%3Athis._parentModel%2CinstanceProps%3Athis._instanceProps%2CforwardHostProp%3Athis._forwardHostPropV2%2CnotifyInstanceProp%3Athis._notifyInstancePropV2%7D)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Creates%20an%20instance%20of%20the%20template%20prepared%20by%20%60templatize%60.%20%20The%20object%0A%20%20%20%20%20%20%20*%20returned%20is%20an%20instance%20of%20the%20anonymous%20class%20generated%20by%20%60templatize%60%0A%20%20%20%20%20%20%20*%20whose%20%60root%60%20property%20is%20a%20document%20fragment%20containing%20newly%20cloned%0A%20%20%20%20%20%20%20*%20template%20content%2C%20and%20which%20has%20property%20accessors%20corresponding%20to%0A%20%20%20%20%20%20%20*%20properties%20referenced%20in%20template%20bindings.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20model%20Object%20containing%20initial%20property%20values%20to%0A%20%20%20%20%20%20%20*%20%20%20populate%20into%20the%20template%20bindings.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Returns%20the%20created%20instance%20of%0A%20%20%20%20%20%20%20*%20the%20template%20prepared%20by%20%60templatize%60.%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2Fstamp%3Afunction%20stamp(model)%7Breturn%20new%20this.ctor(model)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Returns%20the%20template%20%22model%22%20(%60TemplateInstance%60)%20associated%20with%0A%20%20%20%20%20%20%20*%20a%20given%20element%2C%20which%20serves%20as%20the%20binding%20scope%20for%20the%20template%0A%20%20%20%20%20%20%20*%20instance%20the%20element%20is%20contained%20in.%20%20A%20template%20model%20should%20be%20used%0A%20%20%20%20%20%20%20*%20to%20manipulate%20data%20associated%20with%20this%20template%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BHTMLElement%7D%20el%20Element%20for%20which%20to%20return%20a%20template%20model.%0A%20%20%20%20%20%20%20*%20%40return%20%7BTemplateInstanceBase%7D%20Model%20representing%20the%20binding%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20the%20element.%0A%20%20%20%20%20%20%20*%20%40this%20%7BTemplatizerUser%7D%0A%20%20%20%20%20%20%20*%2FmodelForElement%3Afunction%20modelForElement(el)%7Breturn%20Polymer.Templatize.modelForElement(this._templatizerTemplate%2Cel)%3B%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Flegacy%2Ftemplatizer-behavior.html.js%0A",
            "totalBytes": 5584,
            "wastedBytes": 4953,
            "wastedPercent": 88.69985673352436
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Creates%20a%20copy%20of%20%60props%60%20with%20each%20property%20normalized%20such%20that%0A%20%20%20*%20upgraded%20it%20is%20an%20object%20with%20at%20least%20a%20type%20property%20%7B%20type%3A%20Type%7D.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20normalize%0A%20%20%20*%20%40return%20%7BObject%7D%20Copy%20of%20input%20%60props%60%20with%20normalized%20properties%20that%0A%20%20%20*%20are%20in%20the%20form%20%7Btype%3A%20Type%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20normalizeProperties(props)%7Bvar%20output%3D%7B%7D%3Bfor(var%20p%20in%20props)%7Bvar%20o%3Dprops%5Bp%5D%3Boutput%5Bp%5D%3Dtypeof%20o%3D%3D%3D'function'%3F%7Btype%3Ao%7D%3Ao%3B%7Dreturn%20output%3B%7D%2F**%0A%20%20%20*%20Mixin%20that%20provides%20a%20minimal%20starting%20point%20to%20using%20the%20PropertiesChanged%0A%20%20%20*%20mixin%20by%20providing%20a%20mechanism%20to%20declare%20properties%20in%20a%20static%0A%20%20%20*%20getter%20(e.g.%20static%20get%20properties()%20%7B%20return%20%7B%20foo%3A%20String%20%7D%20%7D).%20Changes%0A%20%20%20*%20are%20reported%20via%20the%20%60_propertiesChanged%60%20method.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20provides%20no%20specific%20support%20for%20rendering.%20Users%20are%20expected%0A%20%20%20*%20to%20create%20a%20ShadowRoot%20and%20put%20content%20into%20it%20and%20update%20it%20in%20whatever%0A%20%20%20*%20way%20makes%20sense.%20This%20can%20be%20done%20in%20reaction%20to%20properties%20changing%20by%0A%20%20%20*%20implementing%20%60_propertiesChanged%60.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertiesChanged%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Mixin%20that%20provides%20a%20minimal%20starting%20point%20for%20using%0A%20%20%20*%20the%20PropertiesChanged%20mixin%20by%20providing%20a%20declarative%20%60properties%60%20object.%0A%20%20%20*%2FPolymer.PropertiesMixin%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesChanged%7D%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20base%3DPolymer.PropertiesChanged(superClass)%3B%2F**%0A%20%20%20%20%20*%20Returns%20the%20super%20class%20constructor%20for%20the%20given%20class%2C%20if%20it%20is%20an%0A%20%20%20%20%20*%20instance%20of%20the%20PropertiesMixin.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!PropertiesMixinConstructor%7D%20constructor%20PropertiesMixin%20constructor%0A%20%20%20%20%20*%20%40return%20%7BPropertiesMixinConstructor%7D%20Super%20class%20constructor%0A%20%20%20%20%20*%2Ffunction%20superPropertiesClass(constructor)%7Bvar%20superCtor%3DObject.getPrototypeOf(constructor)%3B%2F%2F%20Note%2C%20the%20%60PropertiesMixin%60%20class%20below%20only%20refers%20to%20the%20class%0A%2F%2F%20generated%20by%20this%20call%20to%20the%20mixin%3B%20the%20instanceof%20test%20only%20works%0A%2F%2F%20because%20the%20mixin%20is%20deduped%20and%20guaranteed%20only%20to%20apply%20once%2C%20hence%0A%2F%2F%20all%20constructors%20in%20a%20proto%20chain%20will%20see%20the%20same%20%60PropertiesMixin%60%0Areturn%20superCtor.prototype%20instanceof%20PropertiesMixin%3F%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2FsuperCtor%3Anull%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20the%20%60properties%60%20object%20for%20the%0A%20%20%20%20%20*%20given%20class.%20Properties%20not%20in%20object%20format%20are%20converted%20to%20at%0A%20%20%20%20%20*%20least%20%7Btype%7D.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BPropertiesMixinConstructor%7D%20constructor%20PropertiesMixin%20constructor%0A%20%20%20%20%20*%20%40return%20%7BObject%7D%20Memoized%20properties%20object%0A%20%20%20%20%20*%2Ffunction%20ownProperties(constructor)%7Bif(!constructor.hasOwnProperty(JSCompiler_renameProperty('__ownProperties'%2Cconstructor)))%7Bvar%20props%3Dnull%3Bif(constructor.hasOwnProperty(JSCompiler_renameProperty('properties'%2Cconstructor)))%7Bvar%20properties%3Dconstructor.properties%3Bif(properties)%7Bprops%3DnormalizeProperties(properties)%3B%7D%7Dconstructor.__ownProperties%3Dprops%3B%7Dreturn%20constructor.__ownProperties%3B%7D%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertiesMixin%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertiesMixin%3Dfunction(_base)%7B_inherits(PropertiesMixin%2C_base)%3Bfunction%20PropertiesMixin()%7B_classCallCheck(this%2CPropertiesMixin)%3Breturn%20_possibleConstructorReturn(this%2C(PropertiesMixin.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin)).apply(this%2Carguments))%3B%7D_createClass(PropertiesMixin%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertiesChanged%60%20method%20and%20adds%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60finalize%60%20which%20lazily%20configures%20the%20element's%20property%20accessors.%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7BPolymer.telemetry.instanceCount%2B%2B%3Bthis.constructor.finalize()%3B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20when%20the%20element%20is%20added%20to%20a%20document.%0A%20%20%20%20%20%20%20*%20Calls%20%60_enableProperties%60%20to%20turn%20on%20property%20system%20from%0A%20%20%20%20%20%20%20*%20%60PropertiesChanged%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bif(_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'connectedCallback'%2Cthis))%7B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7Dthis._enableProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20when%20the%20element%20is%20removed%20from%20a%20document%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Super%20may%20or%20may%20not%20implement%20the%20callback%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bif(_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'disconnectedCallback'%2Cthis))%7B_get(PropertiesMixin.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertiesMixin.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3B%7D%7D%7D%5D%2C%5B%7Bkey%3A'finalize'%2C%2F**%0A%20%20%20%20%20%20%20*%20Finalizes%20an%20element%20definition%2C%20including%20ensuring%20any%20super%20classes%0A%20%20%20%20%20%20%20*%20are%20also%20finalized.%20This%20includes%20ensuring%20property%0A%20%20%20%20%20%20%20*%20accessors%20exist%20on%20the%20element%20prototype.%20This%20method%20calls%0A%20%20%20%20%20%20%20*%20%60_finalizeClass%60%20to%20finalize%20each%20constructor%20in%20the%20prototype%20chain.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20finalize()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('__finalized'%2Cthis)))%7Bvar%20superCtor%3DsuperPropertiesClass(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bif(superCtor)%7BsuperCtor.finalize()%3B%7Dthis.__finalized%3Dtrue%3Bthis._finalizeClass()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Finalize%20an%20element%20class.%20This%20includes%20ensuring%20property%0A%20%20%20%20%20%20%20*%20accessors%20exist%20on%20the%20element%20prototype.%20This%20method%20is%20called%20by%0A%20%20%20%20%20%20%20*%20%60finalize%60%20and%20finalizes%20the%20class%20constructor.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_finalizeClass'%2Cvalue%3Afunction%20_finalizeClass()%7Bvar%20props%3DownProperties(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bif(props)%7Bthis.createProperties(props)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20memoized%20version%20of%20all%20properties%2C%20including%20those%20inherited%0A%20%20%20%20%20%20%20*%20from%20super%20classes.%20Properties%20not%20in%20object%20format%20are%20converted%20to%0A%20%20%20%20%20%20%20*%20at%20least%20%7Btype%7D.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7BObject%7D%20Object%20containing%20properties%20for%20this%20class%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'typeForProperty'%2C%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertiesChanged%60%20method%20to%20return%20type%20specified%20in%20the%0A%20%20%20%20%20%20%20*%20static%20%60properties%60%20object%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20property%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Type%20to%20which%20to%20deserialize%20attribute%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20typeForProperty(name)%7Bvar%20info%3Dthis._properties%5Bname%5D%3Breturn%20info%26%26info.type%3B%7D%7D%2C%7Bkey%3A'observedAttributes'%2C%2F**%0A%20%20%20%20%20%20%20*%20Implements%20standard%20custom%20elements%20getter%20to%20observes%20the%20attributes%0A%20%20%20%20%20%20%20*%20listed%20in%20%60properties%60.%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2Fget%3Afunction%20get()%7Bvar%20_this2%3Dthis%3Bif(!this.hasOwnProperty('__observedAttributes'))%7BPolymer.telemetry.register(this.prototype)%3Bvar%20props%3Dthis._properties%3Bthis.__observedAttributes%3Dprops%3FObject.keys(props).map(function(p)%7Breturn%20_this2.attributeNameForProperty(p)%3B%7D)%3A%5B%5D%3B%7Dreturn%20this.__observedAttributes%3B%7D%7D%2C%7Bkey%3A'_properties'%2Cget%3Afunction%20get()%7Bif(!this.hasOwnProperty(JSCompiler_renameProperty('__properties'%2Cthis)))%7Bvar%20superCtor%3DsuperPropertiesClass(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis)%3Bthis.__properties%3DObject.assign(%7B%7D%2CsuperCtor%26%26superCtor._properties%2CownProperties(%2F**%20%40type%20%7BPropertiesMixinConstructor%7D%20*%2Fthis))%3B%7Dreturn%20this.__properties%3B%7D%7D%5D)%3Breturn%20PropertiesMixin%3B%7D(base)%3Breturn%20PropertiesMixin%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperties-mixin.html.js%0A",
            "totalBytes": 9658,
            "wastedBytes": 4769,
            "wastedPercent": 49.378753365085934
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20The%20%60%3Cdom-if%3E%60%20element%20will%20stamp%20a%20light-dom%20%60%3Ctemplate%3E%60%20child%20when%0A%20%20%20*%20the%20%60if%60%20property%20becomes%20truthy%2C%20and%20the%20template%20can%20use%20Polymer%0A%20%20%20*%20data-binding%20and%20declarative%20event%20features%20when%20used%20in%20the%20context%20of%0A%20%20%20*%20a%20Polymer%20element's%20template.%0A%20%20%20*%0A%20%20%20*%20When%20%60if%60%20becomes%20falsy%2C%20the%20stamped%20content%20is%20hidden%20but%20not%0A%20%20%20*%20removed%20from%20dom.%20When%20%60if%60%20subsequently%20becomes%20truthy%20again%2C%20the%20content%0A%20%20%20*%20is%20simply%20re-shown.%20This%20approach%20is%20used%20due%20to%20its%20favorable%20performance%0A%20%20%20*%20characteristics%3A%20the%20expense%20of%20creating%20template%20content%20is%20paid%20only%0A%20%20%20*%20once%20and%20lazily.%0A%20%20%20*%0A%20%20%20*%20Set%20the%20%60restamp%60%20property%20to%20true%20to%20force%20the%20stamped%20content%20to%20be%0A%20%20%20*%20created%20%2F%20destroyed%20when%20the%20%60if%60%20condition%20changes.%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40extends%20Polymer.Element%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20conditionally%20stamps%20and%20hides%20or%20removes%0A%20%20%20*%20%20%20template%20content%20based%20on%20a%20boolean%20flag.%0A%20%20%20*%2Fvar%20DomIf%3Dfunction(_Polymer%24Element)%7B_inherits(DomIf%2C_Polymer%24Element)%3B_createClass(DomIf%2Cnull%2C%5B%7Bkey%3A'is'%2C%2F%2F%20Not%20needed%20to%20find%20template%3B%20can%20be%20removed%20once%20the%20analyzer%0A%2F%2F%20can%20find%20the%20tag%20name%20from%20customElements.define%20call%0Aget%3Afunction%20get()%7Breturn'dom-if'%3B%7D%7D%2C%7Bkey%3A'template'%2Cget%3Afunction%20get()%7Breturn%20null%3B%7D%7D%2C%7Bkey%3A'properties'%2Cget%3Afunction%20get()%7Breturn%7B%2F**%0A%20%20%20%20%20%20%20%20%20*%20Fired%20whenever%20DOM%20is%20added%20or%20removed%2Fhidden%20by%20this%20template%20(by%0A%20%20%20%20%20%20%20%20%20*%20default%2C%20rendering%20occurs%20lazily).%20%20To%20force%20immediate%20rendering%2C%20call%0A%20%20%20%20%20%20%20%20%20*%20%60render%60.%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40event%20dom-change%0A%20%20%20%20%20%20%20%20%20*%2F%2F**%0A%20%20%20%20%20%20%20%20%20*%20A%20boolean%20indicating%20whether%20this%20template%20should%20stamp.%0A%20%20%20%20%20%20%20%20%20*%2Fif%3A%7Btype%3ABoolean%2Cobserver%3A'__debounceRender'%7D%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20When%20true%2C%20elements%20will%20be%20removed%20from%20DOM%20and%20discarded%20when%20%60if%60%0A%20%20%20%20%20%20%20%20%20*%20becomes%20false%20and%20re-created%20and%20added%20back%20to%20the%20DOM%20when%20%60if%60%0A%20%20%20%20%20%20%20%20%20*%20becomes%20true.%20%20By%20default%2C%20stamped%20elements%20will%20be%20hidden%20but%20left%0A%20%20%20%20%20%20%20%20%20*%20in%20the%20DOM%20when%20%60if%60%20becomes%20false%2C%20which%20is%20generally%20results%0A%20%20%20%20%20%20%20%20%20*%20in%20better%20performance.%0A%20%20%20%20%20%20%20%20%20*%2Frestamp%3A%7Btype%3ABoolean%2Cobserver%3A'__debounceRender'%7D%7D%3B%7D%7D%5D)%3Bfunction%20DomIf()%7B_classCallCheck(this%2CDomIf)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(DomIf.__proto__%7C%7CObject.getPrototypeOf(DomIf)).call(this))%3B_this.__renderDebouncer%3Dnull%3B_this.__invalidProps%3Dnull%3B_this.__instance%3Dnull%3B_this._lastIf%3Dfalse%3B_this.__ctor%3Dnull%3Breturn%20_this%3B%7D_createClass(DomIf%2C%5B%7Bkey%3A'__debounceRender'%2Cvalue%3Afunction%20__debounceRender()%7Bvar%20_this2%3Dthis%3B%2F%2F%20Render%20is%20async%20for%202%20reasons%3A%0A%2F%2F%201.%20To%20eliminate%20dom%20creation%20trashing%20if%20user%20code%20thrashes%20%60if%60%20in%20the%0A%2F%2F%20%20%20%20same%20turn.%20This%20was%20more%20common%20in%201.x%20where%20a%20compound%20computed%0A%2F%2F%20%20%20%20property%20could%20result%20in%20the%20result%20changing%20multiple%20times%2C%20but%20is%0A%2F%2F%20%20%20%20mitigated%20to%20a%20large%20extent%20by%20batched%20property%20processing%20in%202.x.%0A%2F%2F%202.%20To%20avoid%20double%20object%20propagation%20when%20a%20bag%20including%20values%20bound%0A%2F%2F%20%20%20%20to%20the%20%60if%60%20property%20as%20well%20as%20one%20or%20more%20hostProps%20could%20enqueue%0A%2F%2F%20%20%20%20the%20%3Cdom-if%3E%20to%20flush%20before%20the%20%3Ctemplate%3E's%20host%20property%0A%2F%2F%20%20%20%20forwarding.%20In%20that%20scenario%20creating%20an%20instance%20would%20result%20in%0A%2F%2F%20%20%20%20the%20host%20props%20being%20set%20once%2C%20and%20then%20the%20enqueued%20changes%20on%20the%0A%2F%2F%20%20%20%20template%20would%20set%20properties%20a%20second%20time%2C%20potentially%20causing%20an%0A%2F%2F%20%20%20%20object%20to%20be%20set%20to%20an%20instance%20more%20than%20once.%20%20Creating%20the%0A%2F%2F%20%20%20%20instance%20async%20from%20flushing%20data%20ensures%20this%20doesn't%20happen.%20If%0A%2F%2F%20%20%20%20we%20wanted%20a%20sync%20option%20in%20the%20future%2C%20simply%20having%20%3Cdom-if%3E%20flush%0A%2F%2F%20%20%20%20(or%20clear)%20its%20template's%20pending%20host%20properties%20before%20creating%0A%2F%2F%20%20%20%20the%20instance%20would%20also%20avoid%20the%20problem.%0Athis.__renderDebouncer%3DPolymer.Debouncer.debounce(this.__renderDebouncer%2CPolymer.Async.microTask%2Cfunction()%7Breturn%20_this2.__render()%3B%7D)%3BPolymer.enqueueDebouncer(this.__renderDebouncer)%3B%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7B_get(DomIf.prototype.__proto__%7C%7CObject.getPrototypeOf(DomIf.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3Bif(!this.parentNode%7C%7Cthis.parentNode.nodeType%3D%3DNode.DOCUMENT_FRAGMENT_NODE%26%26!this.parentNode.host)%7Bthis.__teardownInstance()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7B_get(DomIf.prototype.__proto__%7C%7CObject.getPrototypeOf(DomIf.prototype)%2C'connectedCallback'%2Cthis).call(this)%3Bthis.style.display%3D'none'%3Bif(this.if)%7Bthis.__debounceRender()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Forces%20the%20element%20to%20render%20its%20content.%20Normally%20rendering%20is%0A%20%20%20%20%20*%20asynchronous%20to%20a%20provoking%20change.%20This%20is%20done%20for%20efficiency%20so%0A%20%20%20%20%20*%20that%20multiple%20changes%20trigger%20only%20a%20single%20render.%20The%20render%20method%0A%20%20%20%20%20*%20should%20be%20called%20if%2C%20for%20example%2C%20template%20rendering%20is%20required%20to%0A%20%20%20%20%20*%20validate%20application%20state.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'render'%2Cvalue%3Afunction%20render()%7BPolymer.flush()%3B%7D%7D%2C%7Bkey%3A'__render'%2Cvalue%3Afunction%20__render()%7Bif(this.if)%7Bif(!this.__ensureInstance())%7B%2F%2F%20No%20template%20found%20yet%0Areturn%3B%7Dthis._showHideChildren()%3B%7Delse%20if(this.restamp)%7Bthis.__teardownInstance()%3B%7Dif(!this.restamp%26%26this.__instance)%7Bthis._showHideChildren()%3B%7Dif(this.if!%3Dthis._lastIf)%7Bthis.dispatchEvent(new%20CustomEvent('dom-change'%2C%7Bbubbles%3Atrue%2Ccomposed%3Atrue%7D))%3Bthis._lastIf%3Dthis.if%3B%7D%7D%7D%2C%7Bkey%3A'__ensureInstance'%2Cvalue%3Afunction%20__ensureInstance()%7Bvar%20_this3%3Dthis%3Bvar%20parentNode%3Dthis.parentNode%3B%2F%2F%20Guard%20against%20element%20being%20detached%20while%20render%20was%20queued%0Aif(parentNode)%7Bif(!this.__ctor)%7Bvar%20template%3D%2F**%20%40type%20%7BHTMLTemplateElement%7D%20*%2Fthis.querySelector('template')%3Bif(!template)%7B%2F%2F%20Wait%20until%20childList%20changes%20and%20template%20should%20be%20there%20by%20then%0Avar%20observer%3Dnew%20MutationObserver(function()%7Bif(_this3.querySelector('template'))%7Bobserver.disconnect()%3B_this3.__render()%3B%7Delse%7Bthrow%20new%20Error('dom-if%20requires%20a%20%3Ctemplate%3E%20child')%3B%7D%7D)%3Bobserver.observe(this%2C%7BchildList%3Atrue%7D)%3Breturn%20false%3B%7Dthis.__ctor%3DPolymer.Templatize.templatize(template%2Cthis%2C%7B%2F%2F%20dom-if%20templatizer%20instances%20require%20%60mutable%3A%20true%60%2C%20as%0A%2F%2F%20%60__syncHostProperties%60%20relies%20on%20that%20behavior%20to%20sync%20objects%0AmutableData%3Atrue%2C%2F**%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20to%20forward%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20property%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%20%40this%20%7Bthis%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20*%2FforwardHostProp%3Afunction%20forwardHostProp(prop%2Cvalue)%7Bif(this.__instance)%7Bif(this.if)%7Bthis.__instance.forwardHostProp(prop%2Cvalue)%3B%7Delse%7B%2F%2F%20If%20we%20have%20an%20instance%20but%20are%20squelching%20host%20property%0A%2F%2F%20forwarding%20due%20to%20if%20being%20false%2C%20note%20the%20invalidated%0A%2F%2F%20properties%20so%20%60__syncHostProperties%60%20can%20sync%20them%20the%20next%0A%2F%2F%20time%20%60if%60%20becomes%20true%0Athis.__invalidProps%3Dthis.__invalidProps%7C%7CObject.create(null)%3Bthis.__invalidProps%5BPolymer.Path.root(prop)%5D%3Dtrue%3B%7D%7D%7D%7D)%3B%7Dif(!this.__instance)%7Bthis.__instance%3Dnew%20this.__ctor()%3BparentNode.insertBefore(this.__instance.root%2Cthis)%3B%7Delse%7Bthis.__syncHostProperties()%3Bvar%20c%24%3Dthis.__instance.children%3Bif(c%24%26%26c%24.length)%7B%2F%2F%20Detect%20case%20where%20dom-if%20was%20re-attached%20in%20new%20position%0Avar%20lastChild%3Dthis.previousSibling%3Bif(lastChild!%3D%3Dc%24%5Bc%24.length-1%5D)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cc%24.length%26%26(n%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7BparentNode.insertBefore(n%2Cthis)%3B%7D%7D%7D%7D%7Dreturn%20true%3B%7D%7D%2C%7Bkey%3A'__syncHostProperties'%2Cvalue%3Afunction%20__syncHostProperties()%7Bvar%20props%3Dthis.__invalidProps%3Bif(props)%7Bfor(var%20prop%20in%20props)%7Bthis.__instance._setPendingProperty(prop%2Cthis.__dataHost%5Bprop%5D)%3B%7Dthis.__invalidProps%3Dnull%3Bthis.__instance._flushProperties()%3B%7D%7D%7D%2C%7Bkey%3A'__teardownInstance'%2Cvalue%3Afunction%20__teardownInstance()%7Bif(this.__instance)%7Bvar%20c%24%3Dthis.__instance.children%3Bif(c%24%26%26c%24.length)%7B%2F%2F%20use%20first%20child%20parent%2C%20for%20case%20when%20dom-if%20may%20have%20been%20detached%0Avar%20parent%3Dc%24%5B0%5D.parentNode%3B%2F%2F%20Instance%20children%20may%20be%20disconnected%20from%20parents%20when%20dom-if%0A%2F%2F%20detaches%20if%20a%20tree%20was%20innerHTML'ed%0Aif(parent)%7Bfor(var%20i%3D0%2Cn%3Bi%3Cc%24.length%26%26(n%3Dc%24%5Bi%5D)%3Bi%2B%2B)%7Bparent.removeChild(n)%3B%7D%7D%7Dthis.__instance%3Dnull%3Bthis.__invalidProps%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Shows%20or%20hides%20the%20template%20instance%20top%20level%20child%20elements.%20For%0A%20%20%20%20%20*%20text%20nodes%2C%20%60textContent%60%20is%20removed%20while%20%22hidden%22%20and%20replaced%20when%0A%20%20%20%20%20*%20%22shown.%22%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_showHideChildren'%2Cvalue%3Afunction%20_showHideChildren()%7Bvar%20hidden%3Dthis.__hideTemplateChildren__%7C%7C!this.if%3Bif(this.__instance)%7Bthis.__instance._showHideChildren(hidden)%3B%7D%7D%7D%5D)%3Breturn%20DomIf%3B%7D(Polymer.Element)%3BcustomElements.define(DomIf.is%2CDomIf)%3B%2F**%20%40const%20*%2FPolymer.DomIf%3DDomIf%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-if.html.js%0A",
            "totalBytes": 10133,
            "wastedBytes": 4646,
            "wastedPercent": 45.8501924405408
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bfunction%20newSplice(index%2Cremoved%2CaddedCount)%7Breturn%7Bindex%3Aindex%2Cremoved%3Aremoved%2CaddedCount%3AaddedCount%7D%3B%7Dvar%20EDIT_LEAVE%3D0%3Bvar%20EDIT_UPDATE%3D1%3Bvar%20EDIT_ADD%3D2%3Bvar%20EDIT_DELETE%3D3%3B%2F%2F%20Note%3A%20This%20function%20is%20*based*%20on%20the%20computation%20of%20the%20Levenshtein%0A%2F%2F%20%22edit%22%20distance.%20The%20one%20change%20is%20that%20%22updates%22%20are%20treated%20as%20two%0A%2F%2F%20edits%20-%20not%20one.%20With%20Array%20splices%2C%20an%20update%20is%20really%20a%20delete%0A%2F%2F%20followed%20by%20an%20add.%20By%20retaining%20this%2C%20we%20optimize%20for%20%22keeping%22%20the%0A%2F%2F%20maximum%20array%20items%20in%20the%20original%20array.%20For%20example%3A%0A%2F%2F%0A%2F%2F%20%20%20'xxxx123'%20-%3E%20'123yyyy'%0A%2F%2F%0A%2F%2F%20With%201-edit%20updates%2C%20the%20shortest%20path%20would%20be%20just%20to%20update%20all%20seven%0A%2F%2F%20characters.%20With%202-edit%20updates%2C%20we%20delete%204%2C%20leave%203%2C%20and%20add%204.%20This%0A%2F%2F%20leaves%20the%20substring%20'123'%20intact.%0Afunction%20calcEditDistances(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd)%7B%2F%2F%20%22Deletion%22%20columns%0Avar%20rowCount%3DoldEnd-oldStart%2B1%3Bvar%20columnCount%3DcurrentEnd-currentStart%2B1%3Bvar%20distances%3Dnew%20Array(rowCount)%3B%2F%2F%20%22Addition%22%20rows.%20Initialize%20null%20column.%0Afor(var%20i%3D0%3Bi%3CrowCount%3Bi%2B%2B)%7Bdistances%5Bi%5D%3Dnew%20Array(columnCount)%3Bdistances%5Bi%5D%5B0%5D%3Di%3B%7D%2F%2F%20Initialize%20null%20row%0Afor(var%20j%3D0%3Bj%3CcolumnCount%3Bj%2B%2B)%7Bdistances%5B0%5D%5Bj%5D%3Dj%3B%7Dfor(var%20_i%3D1%3B_i%3CrowCount%3B_i%2B%2B)%7Bfor(var%20_j%3D1%3B_j%3CcolumnCount%3B_j%2B%2B)%7Bif(equals(current%5BcurrentStart%2B_j-1%5D%2Cold%5BoldStart%2B_i-1%5D))distances%5B_i%5D%5B_j%5D%3Ddistances%5B_i-1%5D%5B_j-1%5D%3Belse%7Bvar%20north%3Ddistances%5B_i-1%5D%5B_j%5D%2B1%3Bvar%20west%3Ddistances%5B_i%5D%5B_j-1%5D%2B1%3Bdistances%5B_i%5D%5B_j%5D%3Dnorth%3Cwest%3Fnorth%3Awest%3B%7D%7D%7Dreturn%20distances%3B%7D%2F%2F%20This%20starts%20at%20the%20final%20weight%2C%20and%20walks%20%22backward%22%20by%20finding%0A%2F%2F%20the%20minimum%20previous%20weight%20recursively%20until%20the%20origin%20of%20the%20weight%0A%2F%2F%20matrix.%0Afunction%20spliceOperationsFromEditDistances(distances)%7Bvar%20i%3Ddistances.length-1%3Bvar%20j%3Ddistances%5B0%5D.length-1%3Bvar%20current%3Ddistances%5Bi%5D%5Bj%5D%3Bvar%20edits%3D%5B%5D%3Bwhile(i%3E0%7C%7Cj%3E0)%7Bif(i%3D%3D0)%7Bedits.push(EDIT_ADD)%3Bj--%3Bcontinue%3B%7Dif(j%3D%3D0)%7Bedits.push(EDIT_DELETE)%3Bi--%3Bcontinue%3B%7Dvar%20northWest%3Ddistances%5Bi-1%5D%5Bj-1%5D%3Bvar%20west%3Ddistances%5Bi-1%5D%5Bj%5D%3Bvar%20north%3Ddistances%5Bi%5D%5Bj-1%5D%3Bvar%20min%3Dvoid%200%3Bif(west%3Cnorth)min%3Dwest%3CnorthWest%3Fwest%3AnorthWest%3Belse%20min%3Dnorth%3CnorthWest%3Fnorth%3AnorthWest%3Bif(min%3D%3DnorthWest)%7Bif(northWest%3D%3Dcurrent)%7Bedits.push(EDIT_LEAVE)%3B%7Delse%7Bedits.push(EDIT_UPDATE)%3Bcurrent%3DnorthWest%3B%7Di--%3Bj--%3B%7Delse%20if(min%3D%3Dwest)%7Bedits.push(EDIT_DELETE)%3Bi--%3Bcurrent%3Dwest%3B%7Delse%7Bedits.push(EDIT_ADD)%3Bj--%3Bcurrent%3Dnorth%3B%7D%7Dedits.reverse()%3Breturn%20edits%3B%7D%2F**%0A%20%20%20*%20Splice%20Projection%20functions%3A%0A%20%20%20*%0A%20%20%20*%20A%20splice%20map%20is%20a%20representation%20of%20how%20a%20previous%20array%20of%20items%0A%20%20%20*%20was%20transformed%20into%20a%20new%20array%20of%20items.%20Conceptually%20it%20is%20a%20list%20of%0A%20%20%20*%20tuples%20of%0A%20%20%20*%0A%20%20%20*%20%20%20%3Cindex%2C%20removed%2C%20addedCount%3E%0A%20%20%20*%0A%20%20%20*%20which%20are%20kept%20in%20ascending%20index%20order%20of.%20The%20tuple%20represents%20that%20at%0A%20%20%20*%20the%20%7Cindex%7C%2C%20%7Cremoved%7C%20sequence%20of%20items%20were%20removed%2C%20and%20counting%20forward%0A%20%20%20*%20from%20%7Cindex%7C%2C%20%7CaddedCount%7C%20items%20were%20added.%0A%20%20%20*%2F%2F**%0A%20%20%20*%20Lacking%20individual%20splice%20mutation%20information%2C%20the%20minimal%20set%20of%0A%20%20%20*%20splices%20can%20be%20synthesized%20given%20the%20previous%20state%20and%20final%20state%20of%20an%0A%20%20%20*%20array.%20The%20basic%20approach%20is%20to%20calculate%20the%20edit%20distance%20matrix%20and%0A%20%20%20*%20choose%20the%20shortest%20path%20through%20it.%0A%20%20%20*%0A%20%20%20*%20Complexity%3A%20O(l%20*%20p)%0A%20%20%20*%20%20%20l%3A%20The%20length%20of%20the%20current%20array%0A%20%20%20*%20%20%20p%3A%20The%20length%20of%20the%20old%20array%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%7D%20current%20The%20current%20%22changed%22%20array%20for%20which%20to%0A%20%20%20*%20calculate%20splices.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20currentStart%20Starting%20index%20in%20the%20%60current%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20currentEnd%20Ending%20index%20in%20the%20%60current%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7B!Array%7D%20old%20The%20original%20%22unchanged%22%20array%20to%20compare%20%60current%60%0A%20%20%20*%20against%20to%20determine%20splices.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20oldStart%20Starting%20index%20in%20the%20%60old%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40param%20%7Bnumber%7D%20oldEnd%20Ending%20index%20in%20the%20%60old%60%20array%20for%0A%20%20%20*%20which%20splices%20are%20calculated.%0A%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20an%20array%20of%20splice%20record%20objects.%20Each%20of%20these%0A%20%20%20*%20contains%3A%20%60index%60%20the%20location%20where%20the%20splice%20occurred%3B%20%60removed%60%0A%20%20%20*%20the%20array%20of%20removed%20items%20from%20this%20location%3B%20%60addedCount%60%20the%20number%0A%20%20%20*%20of%20items%20added%20at%20this%20location.%0A%20%20%20*%2Ffunction%20calcSplices(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd)%7Bvar%20prefixCount%3D0%3Bvar%20suffixCount%3D0%3Bvar%20splice%3Dvoid%200%3Bvar%20minLength%3DMath.min(currentEnd-currentStart%2ColdEnd-oldStart)%3Bif(currentStart%3D%3D0%26%26oldStart%3D%3D0)prefixCount%3DsharedPrefix(current%2Cold%2CminLength)%3Bif(currentEnd%3D%3Dcurrent.length%26%26oldEnd%3D%3Dold.length)suffixCount%3DsharedSuffix(current%2Cold%2CminLength-prefixCount)%3BcurrentStart%2B%3DprefixCount%3BoldStart%2B%3DprefixCount%3BcurrentEnd-%3DsuffixCount%3BoldEnd-%3DsuffixCount%3Bif(currentEnd-currentStart%3D%3D0%26%26oldEnd-oldStart%3D%3D0)return%5B%5D%3Bif(currentStart%3D%3DcurrentEnd)%7Bsplice%3DnewSplice(currentStart%2C%5B%5D%2C0)%3Bwhile(oldStart%3ColdEnd)%7Bsplice.removed.push(old%5BoldStart%2B%2B%5D)%3B%7Dreturn%5Bsplice%5D%3B%7Delse%20if(oldStart%3D%3DoldEnd)return%5BnewSplice(currentStart%2C%5B%5D%2CcurrentEnd-currentStart)%5D%3Bvar%20ops%3DspliceOperationsFromEditDistances(calcEditDistances(current%2CcurrentStart%2CcurrentEnd%2Cold%2ColdStart%2ColdEnd))%3Bsplice%3Dundefined%3Bvar%20splices%3D%5B%5D%3Bvar%20index%3DcurrentStart%3Bvar%20oldIndex%3DoldStart%3Bfor(var%20i%3D0%3Bi%3Cops.length%3Bi%2B%2B)%7Bswitch(ops%5Bi%5D)%7Bcase%20EDIT_LEAVE%3Aif(splice)%7Bsplices.push(splice)%3Bsplice%3Dundefined%3B%7Dindex%2B%2B%3BoldIndex%2B%2B%3Bbreak%3Bcase%20EDIT_UPDATE%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.addedCount%2B%2B%3Bindex%2B%2B%3Bsplice.removed.push(old%5BoldIndex%5D)%3BoldIndex%2B%2B%3Bbreak%3Bcase%20EDIT_ADD%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.addedCount%2B%2B%3Bindex%2B%2B%3Bbreak%3Bcase%20EDIT_DELETE%3Aif(!splice)splice%3DnewSplice(index%2C%5B%5D%2C0)%3Bsplice.removed.push(old%5BoldIndex%5D)%3BoldIndex%2B%2B%3Bbreak%3B%7D%7Dif(splice)%7Bsplices.push(splice)%3B%7Dreturn%20splices%3B%7Dfunction%20sharedPrefix(current%2Cold%2CsearchLength)%7Bfor(var%20i%3D0%3Bi%3CsearchLength%3Bi%2B%2B)%7Bif(!equals(current%5Bi%5D%2Cold%5Bi%5D))return%20i%3B%7Dreturn%20searchLength%3B%7Dfunction%20sharedSuffix(current%2Cold%2CsearchLength)%7Bvar%20index1%3Dcurrent.length%3Bvar%20index2%3Dold.length%3Bvar%20count%3D0%3Bwhile(count%3CsearchLength%26%26equals(current%5B--index1%5D%2Cold%5B--index2%5D))%7Bcount%2B%2B%3B%7Dreturn%20count%3B%7Dfunction%20calculateSplices(current%2Cprevious)%7Breturn%20calcSplices(current%2C0%2Ccurrent.length%2Cprevious%2C0%2Cprevious.length)%3B%7Dfunction%20equals(currentValue%2CpreviousValue)%7Breturn%20currentValue%3D%3D%3DpreviousValue%3B%7D%2F**%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20utilities%20for%20diffing%20arrays.%0A%20%20%20*%2FPolymer.ArraySplice%3D%7B%2F**%0A%20%20%20%20%20*%20Returns%20an%20array%20of%20splice%20records%20indicating%20the%20minimum%20edits%20required%0A%20%20%20%20%20*%20to%20transform%20the%20%60previous%60%20array%20into%20the%20%60current%60%20array.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Splice%20records%20are%20ordered%20by%20index%20and%20contain%20the%20following%20fields%3A%0A%20%20%20%20%20*%20-%20%60index%60%3A%20index%20where%20edit%20started%0A%20%20%20%20%20*%20-%20%60removed%60%3A%20array%20of%20removed%20items%20from%20this%20index%0A%20%20%20%20%20*%20-%20%60addedCount%60%3A%20number%20of%20items%20added%20at%20this%20index%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20function%20is%20based%20on%20the%20Levenshtein%20%22minimum%20edit%20distance%22%0A%20%20%20%20%20*%20algorithm.%20Note%20that%20updates%20are%20treated%20as%20removal%20followed%20by%20addition.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20The%20worst-case%20time%20complexity%20of%20this%20algorithm%20is%20%60O(l%20*%20p)%60%0A%20%20%20%20%20*%20%20%20l%3A%20The%20length%20of%20the%20current%20array%0A%20%20%20%20%20*%20%20%20p%3A%20The%20length%20of%20the%20previous%20array%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20However%2C%20the%20worst-case%20complexity%20is%20reduced%20by%20an%20%60O(n)%60%20optimization%0A%20%20%20%20%20*%20to%20detect%20any%20shared%20prefix%20%26%20suffix%20between%20the%20two%20arrays%20and%20only%0A%20%20%20%20%20*%20perform%20the%20more%20expensive%20minimum%20edit%20distance%20calculation%20over%20the%0A%20%20%20%20%20*%20non-shared%20portions%20of%20the%20arrays.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40function%0A%20%20%20%20%20*%20%40memberof%20Polymer.ArraySplice%0A%20%20%20%20%20*%20%40param%20%7B!Array%7D%20current%20The%20%22changed%22%20array%20for%20which%20splices%20will%20be%0A%20%20%20%20%20*%20calculated.%0A%20%20%20%20%20*%20%40param%20%7B!Array%7D%20previous%20The%20%22unchanged%22%20original%20array%20to%20compare%0A%20%20%20%20%20*%20%60current%60%20against%20to%20determine%20the%20splices.%0A%20%20%20%20%20*%20%40return%20%7B!Array%7D%20Returns%20an%20array%20of%20splice%20record%20objects.%20Each%20of%20these%0A%20%20%20%20%20*%20contains%3A%20%60index%60%20the%20location%20where%20the%20splice%20occurred%3B%20%60removed%60%0A%20%20%20%20%20*%20the%20array%20of%20removed%20items%20from%20this%20location%3B%20%60addedCount%60%20the%20number%0A%20%20%20%20%20*%20of%20items%20added%20at%20this%20location.%0A%20%20%20%20%20*%2FcalculateSplices%3AcalculateSplices%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Farray-splice.html.js%0A",
            "totalBytes": 7970,
            "wastedBytes": 4446,
            "wastedPercent": 55.78419071518192
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3B%2F%2F%20Microtask%20implemented%20using%20Mutation%20Observer%0Avar%20microtaskCurrHandle%3D0%3Bvar%20microtaskLastHandle%3D0%3Bvar%20microtaskCallbacks%3D%5B%5D%3Bvar%20microtaskNodeContent%3D0%3Bvar%20microtaskNode%3Ddocument.createTextNode('')%3Bnew%20window.MutationObserver(microtaskFlush).observe(microtaskNode%2C%7BcharacterData%3Atrue%7D)%3Bfunction%20microtaskFlush()%7Bvar%20len%3DmicrotaskCallbacks.length%3Bfor(var%20i%3D0%3Bi%3Clen%3Bi%2B%2B)%7Bvar%20cb%3DmicrotaskCallbacks%5Bi%5D%3Bif(cb)%7Btry%7Bcb()%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7D%7DmicrotaskCallbacks.splice(0%2Clen)%3BmicrotaskLastHandle%2B%3Dlen%3B%7D%2F**%0A%20%20%20*%20Module%20that%20provides%20a%20number%20of%20strategies%20for%20enqueuing%20asynchronous%0A%20%20%20*%20tasks.%20%20Each%20sub-module%20provides%20a%20standard%20%60run(fn)%60%20interface%20that%20returns%20a%0A%20%20%20*%20handle%2C%20and%20a%20%60cancel(handle)%60%20interface%20for%20canceling%20async%20tasks%20before%0A%20%20%20*%20they%20run.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20that%20provides%20a%20number%20of%20strategies%20for%20enqueuing%20asynchronous%0A%20%20%20*%20tasks.%0A%20%20%20*%2FPolymer.Async%3D%7B%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60setTimeout%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60setTimeout%60.%0A%20%20%20%20%20*%2FtimeOut%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Returns%20a%20sub-module%20with%20the%20async%20interface%20providing%20the%20provided%0A%20%20%20%20%20%20%20*%20delay.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Time%20to%20wait%20before%20calling%20callbacks%20in%20ms%0A%20%20%20%20%20%20%20*%20%40return%20%7B!AsyncInterface%7D%20An%20async%20timeout%20interface%0A%20%20%20%20%20%20%20*%2Fafter%3Afunction%20after(delay)%7Breturn%7Brun%3Afunction%20run(fn)%7Breturn%20window.setTimeout(fn%2Cdelay)%3B%7D%2Ccancel%3Afunction%20cancel(handle)%7Bwindow.clearTimeout(handle)%3B%7D%7D%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20in%20the%20next%20task.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%3D%7D%20delay%20Delay%20in%20milliseconds%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn%2Cdelay)%7Breturn%20window.setTimeout(fn%2Cdelay)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60timeOut%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.timeOut%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.clearTimeout(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%2FanimationFrame%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20%60requestAnimationFrame%60%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.animationFrame%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(number)%3Avoid%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn)%7Breturn%20window.requestAnimationFrame(fn)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60animationFrame%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.animationFrame%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.cancelAnimationFrame(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20wrapper%20around%20%60requestIdleCallback%60.%20%20Falls%20back%20to%0A%20%20%20%20%20*%20%60setTimeout%60%20on%20browsers%20that%20do%20not%20support%20%60requestIdleCallback%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20wrapper%20around%20%60requestIdleCallback%60.%0A%20%20%20%20%20*%2FidlePeriod%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20%60requestIdleCallback%60%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.idlePeriod%0A%20%20%20%20%20%20%20*%20%40param%20%7Bfunction(!IdleDeadline)%3Avoid%7D%20fn%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(fn)%7Breturn%20window.requestIdleCallback%3Fwindow.requestIdleCallback(fn)%3Awindow.setTimeout(fn%2C16)%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60idlePeriod%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.idlePeriod%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bwindow.cancelIdleCallback%3Fwindow.cancelIdleCallback(handle)%3Awindow.clearTimeout(handle)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20Async%20interface%20for%20enqueuing%20callbacks%20that%20run%20at%20microtask%20timing.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%20that%20microtask%20timing%20is%20achieved%20via%20a%20single%20%60MutationObserver%60%2C%0A%20%20%20%20%20*%20and%20thus%20callbacks%20enqueued%20with%20this%20API%20will%20all%20run%20in%20a%20single%0A%20%20%20%20%20*%20batch%2C%20and%20not%20interleaved%20with%20other%20microtasks%20such%20as%20promises.%0A%20%20%20%20%20*%20Promises%20are%20avoided%20as%20an%20implementation%20choice%20for%20the%20time%20being%0A%20%20%20%20%20*%20due%20to%20Safari%20bugs%20that%20cause%20Promises%20to%20lack%20microtask%20guarantees.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40namespace%0A%20%20%20%20%20*%20%40memberof%20Polymer.Async%0A%20%20%20%20%20*%20%40summary%20Async%20interface%20for%20enqueuing%20callbacks%20that%20run%20at%20microtask%0A%20%20%20%20%20*%20%20%20timing.%0A%20%20%20%20%20*%2FmicroTask%3A%7B%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20a%20function%20called%20at%20microtask%20timing.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.microTask%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Function%3D%7D%20callback%20Callback%20to%20run%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20Handle%20used%20for%20canceling%20task%0A%20%20%20%20%20%20%20*%2Frun%3Afunction%20run(callback)%7BmicrotaskNode.textContent%3DmicrotaskNodeContent%2B%2B%3BmicrotaskCallbacks.push(callback)%3Breturn%20microtaskCurrHandle%2B%2B%3B%7D%2C%2F**%0A%20%20%20%20%20%20%20*%20Cancels%20a%20previously%20enqueued%20%60microTask%60%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40memberof%20Polymer.Async.microTask%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20handle%20Handle%20returned%20from%20%60run%60%20of%20callback%20to%20cancel%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fcancel%3Afunction%20cancel(handle)%7Bvar%20idx%3Dhandle-microtaskLastHandle%3Bif(idx%3E%3D0)%7Bif(!microtaskCallbacks%5Bidx%5D)%7Bthrow%20new%20Error('invalid%20async%20handle%3A%20'%2Bhandle)%3B%7DmicrotaskCallbacks%5Bidx%5D%3Dnull%3B%7D%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fasync.html.js%0A",
            "totalBytes": 5682,
            "wastedBytes": 4165,
            "wastedPercent": 73.30165434706089
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20%20%20*%20Class%20representing%20a%20static%20string%20value%20which%20can%20be%20used%20to%20filter%0A%20%20%20%20%20*%20strings%20by%20asseting%20that%20they%20have%20been%20created%20via%20this%20class.%20The%0A%20%20%20%20%20*%20%60value%60%20property%20returns%20the%20string%20passed%20to%20the%20constructor.%0A%20%20%20%20%20*%2Fvar%20LiteralString%3Dfunction()%7Bfunction%20LiteralString(string)%7B_classCallCheck(this%2CLiteralString)%3B%2F**%20%40type%20%7Bstring%7D%20*%2Fthis.value%3Dstring.toString()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20LiteralString%20string%20value%0A%20%20%20%20%20%20%20*%2F_createClass(LiteralString%2C%5B%7Bkey%3A'toString'%2Cvalue%3Afunction%20toString()%7Breturn%20this.value%3B%7D%7D%5D)%3Breturn%20LiteralString%3B%7D()%3B%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Object%20to%20stringify%20into%20HTML%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20HTML%20stringified%20form%20of%20%60obj%60%0A%20%20%20%20%20*%2Ffunction%20literalValue(value)%7Bif(value%20instanceof%20LiteralString)%7Breturn(%2F**%20%40type%20%7B!LiteralString%7D%20*%2Fvalue.value)%3B%7Delse%7Bthrow%20new%20Error('non-literal%20value%20passed%20to%20Polymer.htmlLiteral%3A%20'%2Bvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Object%20to%20stringify%20into%20HTML%0A%20%20%20%20%20*%20%40return%20%7Bstring%7D%20HTML%20stringified%20form%20of%20%60obj%60%0A%20%20%20%20%20*%2Ffunction%20htmlValue(value)%7Bif(value%20instanceof%20HTMLTemplateElement)%7Breturn(%2F**%20%40type%20%7B!HTMLTemplateElement%20%7D%20*%2Fvalue.innerHTML)%3B%7Delse%20if(value%20instanceof%20LiteralString)%7Breturn%20literalValue(value)%3B%7Delse%7Bthrow%20new%20Error('non-template%20value%20passed%20to%20Polymer.html%3A%20'%2Bvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20*%20A%20template%20literal%20tag%20that%20creates%20an%20HTML%20%3Ctemplate%3E%20element%20from%20the%0A%20%20%20%20%20*%20contents%20of%20the%20string.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20allows%20you%20to%20write%20a%20Polymer%20Template%20in%20JavaScript.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Templates%20can%20be%20composed%20by%20interpolating%20%60HTMLTemplateElement%60s%20in%0A%20%20%20%20%20*%20expressions%20in%20the%20JavaScript%20template%20literal.%20The%20nested%20template's%0A%20%20%20%20%20*%20%60innerHTML%60%20is%20included%20in%20the%20containing%20template.%20%20The%20only%20other%0A%20%20%20%20%20*%20values%20allowed%20in%20expressions%20are%20those%20returned%20from%20%60Polymer.htmlLiteral%60%0A%20%20%20%20%20*%20which%20ensures%20only%20literal%20values%20from%20JS%20source%20ever%20reach%20the%20HTML%2C%20to%0A%20%20%20%20%20*%20guard%20against%20XSS%20risks.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20All%20other%20values%20are%20disallowed%20in%20expressions%20to%20help%20prevent%20XSS%0A%20%20%20%20%20*%20attacks%3B%20however%2C%20%60Polymer.htmlLiteral%60%20can%20be%20used%20to%20compose%20static%0A%20%20%20%20%20*%20string%20values%20into%20templates.%20This%20is%20useful%20to%20compose%20strings%20into%0A%20%20%20%20%20*%20places%20that%20do%20not%20accept%20html%2C%20like%20the%20css%20text%20of%20a%20%60style%60%0A%20%20%20%20%20*%20element.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20return%20Polymer.html%60%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cstyle%3E%3Ahost%7B%20content%3A%22...%22%20%7D%3C%2Fstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22shadowed%22%3E%24%7Bthis.partialTemplate%7D%3C%2Fdiv%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%24%7Bsuper.template%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20partialTemplate()%20%7B%20return%20Polymer.html%60%3Cspan%3EPartial!%3C%2Fspan%3E%60%3B%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!ITemplateArray%7D%20strings%20Constant%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40param%20%7B...*%7D%20values%20Variable%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40return%20%7B!HTMLTemplateElement%7D%20Constructed%20HTMLTemplateElement%0A%20%20%20%20%20*%2FPolymer.html%3Dfunction%20html(strings)%7Bvar%20template%3D%2F**%20%40type%20%7B!HTMLTemplateElement%7D%20*%2Fdocument.createElement('template')%3Bfor(var%20_len%3Darguments.length%2Cvalues%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bvalues%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dtemplate.innerHTML%3Dvalues.reduce(function(acc%2Cv%2Cidx)%7Breturn%20acc%2BhtmlValue(v)%2Bstrings%5Bidx%2B1%5D%3B%7D%2Cstrings%5B0%5D)%3Breturn%20template%3B%7D%3B%2F**%0A%20%20%20%20%20*%20An%20html%20literal%20tag%20that%20can%20be%20used%20with%20%60Polymer.html%60%20to%20compose.%0A%20%20%20%20%20*%20a%20literal%20string.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20template()%20%7B%0A%20%20%20%20%20*%20%20%20%20%20%20%20return%20Polymer.html%60%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%3Ahost%20%7B%20display%3A%20block%3B%20%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%20%20%24%7BstyleTemplate%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3C%2Fstyle%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%3Cdiv%20class%3D%22shadowed%22%3E%24%7BstaticValue%7D%3C%2Fdiv%3E%0A%20%20%20%20%20*%20%20%20%20%20%20%20%20%20%24%7Bsuper.template%7D%0A%20%20%20%20%20*%20%20%20%20%20%20%20%60%3B%0A%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20*%20%20%20%20%20static%20get%20styleTemplate()%20%7B%20return%20Polymer.htmlLiteral%60.shadowed%20%7B%20background%3A%20gray%3B%20%7D%60%3B%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%20%40param%20%7B!ITemplateArray%7D%20strings%20Constant%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40param%20%7B...*%7D%20values%20Variable%20parts%20of%20tagged%20template%20literal%0A%20%20%20%20%20*%20%40return%20%7B!LiteralString%7D%20Constructed%20literal%20string%0A%20%20%20%20%20*%2FPolymer.htmlLiteral%3Dfunction(strings)%7Bfor(var%20_len2%3Darguments.length%2Cvalues%3DArray(_len2%3E1%3F_len2-1%3A0)%2C_key2%3D1%3B_key2%3C_len2%3B_key2%2B%2B)%7Bvalues%5B_key2-1%5D%3Darguments%5B_key2%5D%3B%7Dreturn%20new%20LiteralString(values.reduce(function(acc%2Cv%2Cidx)%7Breturn%20acc%2BliteralValue(v)%2Bstrings%5Bidx%2B1%5D%3B%7D%2Cstrings%5B0%5D))%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fhtml-tag.html.js%0A",
            "totalBytes": 5107,
            "wastedBytes": 3208,
            "wastedPercent": 62.81574309770903
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20modules%3D%7B%7D%3Bvar%20lcModules%3D%7B%7D%3Bfunction%20setModule(id%2Cmodule)%7B%2F%2F%20store%20id%20separate%20from%20lowercased%20id%20so%20that%0A%2F%2F%20in%20all%20cases%20mixedCase%20id%20will%20stored%20distinctly%0A%2F%2F%20and%20lowercase%20version%20is%20a%20fallback%0Amodules%5Bid%5D%3DlcModules%5Bid.toLowerCase()%5D%3Dmodule%3B%7Dfunction%20findModule(id)%7Breturn%20modules%5Bid%5D%7C%7ClcModules%5Bid.toLowerCase()%5D%3B%7Dfunction%20styleOutsideTemplateCheck(inst)%7Bif(inst.querySelector('style'))%7Bconsole.warn('dom-module%20%25s%20has%20style%20outside%20template'%2Cinst.id)%3B%7D%7D%2F**%0A%20%20%20*%20The%20%60dom-module%60%20element%20registers%20the%20dom%20it%20contains%20to%20the%20name%20given%0A%20%20%20*%20by%20the%20module's%20id%20attribute.%20It%20provides%20a%20unified%20database%20of%20dom%0A%20%20%20*%20accessible%20via%20its%20static%20%60import%60%20API.%0A%20%20%20*%0A%20%20%20*%20A%20key%20use%20case%20of%20%60dom-module%60%20is%20for%20providing%20custom%20element%20%60%3Ctemplate%3E%60s%0A%20%20%20*%20via%20HTML%20imports%20that%20are%20parsed%20by%20the%20native%20HTML%20parser%2C%20that%20can%20be%0A%20%20%20*%20relocated%20during%20a%20bundling%20pass%20and%20still%20looked%20up%20by%20%60id%60.%0A%20%20%20*%0A%20%20%20*%20Example%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20%3Cdom-module%20id%3D%22foo%22%3E%0A%20%20%20*%20%20%20%20%20%20%20%3Cimg%20src%3D%22stuff.png%22%3E%0A%20%20%20*%20%20%20%20%20%3C%2Fdom-module%3E%0A%20%20%20*%0A%20%20%20*%20Then%20in%20code%20in%20some%20other%20location%20that%20cannot%20access%20the%20dom-module%20above%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20let%20img%20%3D%20customElements.get('dom-module').import('foo'%2C%20'img')%3B%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20HTMLElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20that%20provides%20a%20registry%20of%20relocatable%20DOM%20content%0A%20%20%20*%20%20%20by%20%60id%60%20that%20is%20agnostic%20to%20bundling.%0A%20%20%20*%20%40unrestricted%0A%20%20%20*%2Fvar%20DomModule%3Dfunction(_HTMLElement)%7B_inherits(DomModule%2C_HTMLElement)%3Bfunction%20DomModule()%7B_classCallCheck(this%2CDomModule)%3Breturn%20_possibleConstructorReturn(this%2C(DomModule.__proto__%7C%7CObject.getPrototypeOf(DomModule)).apply(this%2Carguments))%3B%7D_createClass(DomModule%2C%5B%7Bkey%3A'attributeChangedCallback'%2C%2F*%20eslint-disable%20no-unused-vars%20*%2F%2F**%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Name%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20old%20Old%20value%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20value%20Current%20value%20of%20attribute.%0A%20%20%20%20%20*%20%40param%20%7B%3Fstring%7D%20namespace%20Attribute%20namespace.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fvalue%3Afunction%20attributeChangedCallback(name%2Cold%2Cvalue%2Cnamespace)%7Bif(old!%3D%3Dvalue)%7Bthis.register()%3B%7D%7D%2F*%20eslint-enable%20no-unused-args%20*%2F%2F**%0A%20%20%20%20%20*%20The%20absolute%20URL%20of%20the%20original%20location%20of%20this%20%60dom-module%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20value%20will%20differ%20from%20this%20element's%20%60ownerDocument%60%20in%20the%0A%20%20%20%20%20*%20following%20ways%3A%0A%20%20%20%20%20*%20-%20Takes%20into%20account%20any%20%60assetpath%60%20attribute%20added%20during%20bundling%0A%20%20%20%20%20*%20%20%20to%20indicate%20the%20original%20location%20relative%20to%20the%20bundled%20location%0A%20%20%20%20%20*%20-%20Uses%20the%20HTMLImports%20polyfill's%20%60importForElement%60%20API%20to%20ensure%0A%20%20%20%20%20*%20%20%20the%20path%20is%20relative%20to%20the%20import%20document's%20location%20since%0A%20%20%20%20%20*%20%20%20%60ownerDocument%60%20is%20not%20currently%20polyfilled%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'register'%2C%2F**%0A%20%20%20%20%20*%20Registers%20the%20dom-module%20at%20a%20given%20id.%20This%20method%20should%20only%20be%20called%0A%20%20%20%20%20*%20when%20a%20dom-module%20is%20imperatively%20created.%20For%0A%20%20%20%20%20*%20example%2C%20%60document.createElement('dom-module').register('foo')%60.%0A%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20id%20The%20id%20at%20which%20to%20register%20the%20dom-module.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fvalue%3Afunction%20register(id)%7Bid%3Did%7C%7Cthis.id%3Bif(id)%7B%2F%2F%20Under%20strictTemplatePolicy%2C%20reject%20and%20null%20out%20any%20re-registered%0A%2F%2F%20dom-module%20since%20it%20is%20ambiguous%20whether%20first-in%20or%20last-in%20is%20trusted%20%0Aif(Polymer.strictTemplatePolicy%26%26findModule(id)!%3D%3Dundefined)%7BsetModule(id%2Cnull)%3Bthrow%20new%20Error('strictTemplatePolicy%3A%20dom-module%20'%2Bid%2B'%20re-registered')%3B%7Dthis.id%3Did%3BsetModule(id%2Cthis)%3BstyleOutsideTemplateCheck(this)%3B%7D%7D%7D%2C%7Bkey%3A'assetpath'%2Cget%3Afunction%20get()%7B%2F%2F%20Don't%20override%20existing%20assetpath.%0Aif(!this.__assetpath)%7B%2F%2F%20note%3A%20assetpath%20set%20via%20an%20attribute%20must%20be%20relative%20to%20this%0A%2F%2F%20element's%20location%3B%20accomodate%20polyfilled%20HTMLImports%0Avar%20owner%3Dwindow.HTMLImports%26%26HTMLImports.importForElement%3FHTMLImports.importForElement(this)%7C%7Cdocument%3Athis.ownerDocument%3Bvar%20url%3DPolymer.ResolveUrl.resolveUrl(this.getAttribute('assetpath')%7C%7C''%2Cowner.baseURI)%3Bthis.__assetpath%3DPolymer.ResolveUrl.pathFromUrl(url)%3B%7Dreturn%20this.__assetpath%3B%7D%7D%5D%2C%5B%7Bkey%3A'import'%2C%2F**%0A%20%20%20%20%20*%20Retrieves%20the%20element%20specified%20by%20the%20css%20%60selector%60%20in%20the%20module%0A%20%20%20%20%20*%20registered%20by%20%60id%60.%20For%20example%2C%20this.import('foo'%2C%20'img')%3B%0A%20%20%20%20%20*%20%40param%20%7Bstring%7D%20id%20The%20id%20of%20the%20dom-module%20in%20which%20to%20search.%0A%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20selector%20The%20css%20selector%20by%20which%20to%20find%20the%20element.%0A%20%20%20%20%20*%20%40return%20%7BElement%7D%20Returns%20the%20element%20which%20matches%20%60selector%60%20in%20the%0A%20%20%20%20%20*%20module%20registered%20at%20the%20specified%20%60id%60.%0A%20%20%20%20%20*%2Fvalue%3Afunction%20_import(id%2Cselector)%7Bif(id)%7Bvar%20m%3DfindModule(id)%3Bif(m%26%26selector)%7Breturn%20m.querySelector(selector)%3B%7Dreturn%20m%3B%7Dreturn%20null%3B%7D%7D%2C%7Bkey%3A'observedAttributes'%2Cget%3Afunction%20get()%7Breturn%5B'id'%5D%3B%7D%7D%5D)%3Breturn%20DomModule%3B%7D(HTMLElement)%3BDomModule.prototype%5B'modules'%5D%3Dmodules%3BcustomElements.define('dom-module'%2CDomModule)%3B%2F**%20%40const%20*%2FPolymer.DomModule%3DDomModule%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fdom-module.html.js%0A",
            "totalBytes": 6199,
            "wastedBytes": 3169,
            "wastedPercent": 51.12114857235037
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20attr%3D'include'%3Bvar%20CustomStyleInterface%3Dwindow.ShadyCSS.CustomStyleInterface%3B%2F**%0A%20%20%20*%20Custom%20element%20for%20defining%20styles%20in%20the%20main%20document%20that%20can%20take%0A%20%20%20*%20advantage%20of%20%5Bshady%20DOM%5D(https%3A%2F%2Fgithub.com%2Fwebcomponents%2Fshadycss)%20shims%0A%20%20%20*%20for%20style%20encapsulation%2C%20custom%20properties%2C%20and%20custom%20mixins.%0A%20%20%20*%0A%20%20%20*%20-%20Document%20styles%20defined%20in%20a%20%60%3Ccustom-style%3E%60%20are%20shimmed%20to%20ensure%20they%0A%20%20%20*%20%20%20do%20not%20leak%20into%20local%20DOM%20when%20running%20on%20browsers%20without%20native%0A%20%20%20*%20%20%20Shadow%20DOM.%0A%20%20%20*%20-%20Custom%20properties%20can%20be%20defined%20in%20a%20%60%3Ccustom-style%3E%60.%20Use%20the%20%60html%60%20selector%0A%20%20%20*%20%20%20to%20define%20custom%20properties%20that%20apply%20to%20all%20custom%20elements.%0A%20%20%20*%20-%20Custom%20mixins%20can%20be%20defined%20in%20a%20%60%3Ccustom-style%3E%60%2C%20if%20you%20import%20the%20optional%0A%20%20%20*%20%20%20%5Bapply%20shim%5D(https%3A%2F%2Fgithub.com%2Fwebcomponents%2Fshadycss%23about-applyshim)%0A%20%20%20*%20%20%20(%60shadycss%2Fapply-shim.html%60).%0A%20%20%20*%0A%20%20%20*%20To%20use%3A%0A%20%20%20*%0A%20%20%20*%20-%20Import%20%60custom-style.html%60.%0A%20%20%20*%20-%20Place%20a%20%60%3Ccustom-style%3E%60%20element%20in%20the%20main%20document%2C%20wrapping%20an%20inline%20%60%3Cstyle%3E%60%20tag%20that%0A%20%20%20*%20%20%20contains%20the%20CSS%20rules%20you%20want%20to%20shim.%0A%20%20%20*%0A%20%20%20*%20For%20example%3A%0A%20%20%20*%0A%20%20%20*%20%60%60%60html%0A%20%20%20*%20%3C!--%20import%20apply%20shim--only%20required%20if%20using%20mixins%20--%3E%0A%20%20%20*%20%3Clink%20rel%3D%22import%22%20href%3D%22bower_components%2Fshadycss%2Fapply-shim.html%22%3E%0A%20%20%20*%20%3C!--%20import%20custom-style%20element%20--%3E%0A%20%20%20*%20%3Clink%20rel%3D%22import%22%20href%3D%22bower_components%2Fpolymer%2Flib%2Felements%2Fcustom-style.html%22%3E%0A%20%20%20*%0A%20%20%20*%20%3Ccustom-style%3E%0A%20%20%20*%20%20%20%3Cstyle%3E%0A%20%20%20*%20%20%20%20%20html%20%7B%0A%20%20%20*%20%20%20%20%20%20%20--custom-color%3A%20blue%3B%0A%20%20%20*%20%20%20%20%20%20%20--custom-mixin%3A%20%7B%0A%20%20%20*%20%20%20%20%20%20%20%20%20font-weight%3A%20bold%3B%0A%20%20%20*%20%20%20%20%20%20%20%20%20color%3A%20red%3B%0A%20%20%20*%20%20%20%20%20%20%20%7D%3B%0A%20%20%20*%20%20%20%20%20%7D%0A%20%20%20*%20%20%20%3C%2Fstyle%3E%0A%20%20%20*%20%3C%2Fcustom-style%3E%0A%20%20%20*%20%60%60%60%0A%20%20%20*%0A%20%20%20*%20%40customElement%0A%20%20%20*%20%40extends%20HTMLElement%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Custom%20element%20for%20defining%20styles%20in%20the%20main%20document%20that%20can%0A%20%20%20*%20%20%20take%20advantage%20of%20Polymer's%20style%20scoping%20and%20custom%20properties%20shims.%0A%20%20%20*%2Fvar%20CustomStyle%3Dfunction(_HTMLElement)%7B_inherits(CustomStyle%2C_HTMLElement)%3Bfunction%20CustomStyle()%7B_classCallCheck(this%2CCustomStyle)%3Bvar%20_this%3D_possibleConstructorReturn(this%2C(CustomStyle.__proto__%7C%7CObject.getPrototypeOf(CustomStyle)).call(this))%3B_this._style%3Dnull%3BCustomStyleInterface.addCustomStyle(_this)%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20*%20Returns%20the%20light-DOM%20%60%3Cstyle%3E%60%20child%20this%20element%20wraps.%20%20Upon%20first%0A%20%20%20%20%20*%20call%20any%20style%20modules%20referenced%20via%20the%20%60include%60%20attribute%20will%20be%0A%20%20%20%20%20*%20concatenated%20to%20this%20element's%20%60%3Cstyle%3E%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7BHTMLStyleElement%7D%20This%20element's%20light-DOM%20%60%3Cstyle%3E%60%0A%20%20%20%20%20*%2F_createClass(CustomStyle%2C%5B%7Bkey%3A'getStyle'%2Cvalue%3Afunction%20getStyle()%7Bif(this._style)%7Breturn%20this._style%3B%7Dvar%20style%3D%2F**%20%40type%20%7BHTMLStyleElement%7D%20*%2Fthis.querySelector('style')%3Bif(!style)%7Breturn%20null%3B%7Dthis._style%3Dstyle%3Bvar%20include%3Dstyle.getAttribute(attr)%3Bif(include)%7Bstyle.removeAttribute(attr)%3Bstyle.textContent%3DPolymer.StyleGather.cssFromModules(include)%2Bstyle.textContent%3B%7D%2F*%0A%20%20%20%20%20%20HTML%20Imports%20styling%20the%20main%20document%20are%20deprecated%20in%20Chrome%0A%20%20%20%20%20%20https%3A%2F%2Fcrbug.com%2F523952%0A%0A%20%20%20%20%20%20If%20this%20element%20is%20not%20in%20the%20main%20document%2C%20then%20it%20must%20be%20in%20an%20HTML%20Import%20document.%0A%20%20%20%20%20%20In%20that%20case%2C%20move%20the%20custom%20style%20to%20the%20main%20document.%0A%0A%20%20%20%20%20%20The%20ordering%20of%20%60%3Ccustom-style%3E%60%20should%20stay%20the%20same%20as%20when%20loaded%20by%20HTML%20Imports%2C%20but%20there%20may%20be%20odd%0A%20%20%20%20%20%20cases%20of%20ordering%20w.r.t%20the%20main%20document%20styles.%0A%20%20%20%20%20%20*%2Fif(this.ownerDocument!%3D%3Dwindow.document)%7Bwindow.document.head.appendChild(this)%3B%7Dreturn%20this._style%3B%7D%7D%5D)%3Breturn%20CustomStyle%3B%7D(HTMLElement)%3Bwindow.customElements.define('custom-style'%2CCustomStyle)%3B%2F**%20%40const%20*%2FPolymer.CustomStyle%3DCustomStyle%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Felements%2Fcustom-style.html.js%0A",
            "totalBytes": 5009,
            "wastedBytes": 2719,
            "wastedPercent": 54.28229187462568
          },
          {
            "url": "data:text/javascript;charset=utf-8,%2F**%20%40suppress%20%7Bdeprecated%7D%20*%2F(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20Sets%20the%20global%2C%20legacy%20settings.%0A%20%20%20*%0A%20%20%20*%20%40deprecated%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.Settings%3DPolymer.Settings%7C%7C%7B%7D%3BPolymer.Settings.useShadow%3D!window.ShadyDOM%3BPolymer.Settings.useNativeCSSProperties%3DBoolean(!window.ShadyCSS%7C%7Cwindow.ShadyCSS.nativeCss)%3BPolymer.Settings.useNativeCustomElements%3D!window.customElements.polyfillWrapFlushCallback%3B%2F**%0A%20%20%20*%20Globally%20settable%20property%20that%20is%20automatically%20assigned%20to%0A%20%20%20*%20%60Polymer.ElementMixin%60%20instances%2C%20useful%20for%20binding%20in%20templates%20to%0A%20%20%20*%20make%20URL's%20relative%20to%20an%20application's%20root.%20%20Defaults%20to%20the%20main%0A%20%20%20*%20document%20URL%2C%20but%20can%20be%20overridden%20by%20users.%20%20It%20may%20be%20useful%20to%20set%0A%20%20%20*%20%60Polymer.rootPath%60%20to%20provide%20a%20stable%20application%20mount%20path%20when%0A%20%20%20*%20using%20client%20side%20routing.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.rootPath%3DPolymer.rootPath%7C%7CPolymer.ResolveUrl.pathFromUrl(document.baseURI%7C%7Cwindow.location.href)%3B%2F**%0A%20%20%20*%20Sets%20the%20global%20rootPath%20property%20used%20by%20%60Polymer.ElementMixin%60%20and%0A%20%20%20*%20available%20via%20%60Polymer.rootPath%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20new%20root%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setRootPath%3Dfunction(path)%7BPolymer.rootPath%3Dpath%3B%7D%3B%2F**%0A%20%20%20*%20A%20global%20callback%20used%20to%20sanitize%20any%20value%20before%20inserting%20it%20into%20the%20DOM.%20The%20callback%20signature%20is%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%20%20Polymer%20%3D%20%7B%0A%20%20%20*%20%20%20%20%20%20%20sanitizeDOMValue%3A%20function(value%2C%20name%2C%20type%2C%20node)%20%7B%20...%20%7D%0A%20%20%20*%20%20%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20Where%3A%0A%20%20%20*%0A%20%20%20*%20%60value%60%20is%20the%20value%20to%20sanitize.%0A%20%20%20*%20%60name%60%20is%20the%20name%20of%20an%20attribute%20or%20property%20(for%20example%2C%20href).%0A%20%20%20*%20%60type%60%20indicates%20where%20the%20value%20is%20being%20inserted%3A%20one%20of%20property%2C%20attribute%2C%20or%20text.%0A%20%20%20*%20%60node%60%20is%20the%20node%20where%20the%20value%20is%20being%20inserted.%0A%20%20%20*%0A%20%20%20*%20%40type%20%7B(function(*%2Cstring%2Cstring%2CNode)%3A*)%7Cundefined%7D%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.sanitizeDOMValue%3DPolymer.sanitizeDOMValue%7C%7Cnull%3B%2F**%0A%20%20%20*%20Sets%20the%20global%20sanitizeDOMValue%20available%20via%20%60Polymer.sanitizeDOMValue%60.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7B(function(*%2Cstring%2Cstring%2CNode)%3A*)%7Cundefined%7D%20newSanitizeDOMValue%20the%20global%20sanitizeDOMValue%20callback%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setSanitizeDOMValue%3Dfunction(newSanitizeDOMValue)%7BPolymer.sanitizeDOMValue%3DnewSanitizeDOMValue%3B%7D%3B%2F**%0A%20%20%20*%20Globally%20settable%20property%20to%20make%20Polymer%20Gestures%20use%20passive%20TouchEvent%20listeners%20when%20recognizing%20gestures.%0A%20%20%20*%20When%20set%20to%20%60true%60%2C%20gestures%20made%20from%20touch%20will%20not%20be%20able%20to%20prevent%20scrolling%2C%20allowing%20for%20smoother%0A%20%20%20*%20scrolling%20performance.%0A%20%20%20*%20Defaults%20to%20%60false%60%20for%20backwards%20compatibility.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2FPolymer.passiveTouchGestures%3DPolymer.passiveTouchGestures%7C%7Cfalse%3B%2F**%0A%20%20%20*%20Sets%20%60passiveTouchGestures%60%20globally%20for%20all%20elements%20using%20Polymer%20Gestures.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bboolean%7D%20usePassive%20enable%20or%20disable%20passive%20touch%20gestures%20globally%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setPassiveTouchGestures%3Dfunction(usePassive)%7BPolymer.passiveTouchGestures%3DusePassive%3B%7D%3BPolymer.legacyOptimizations%3DPolymer.legacyOptimizations%7C%7Cwindow.PolymerSettings%26%26window.PolymerSettings.legacyOptimizations%7C%7Cfalse%3B%2F**%0A%20%20%20*%20Sets%20%60legacyOptimizations%60%20globally%20for%20all%20elements.%20Enables%0A%20%20%20*%20optimizations%20when%20only%20legacy%20Polymer()%20style%20elements%20are%20used.%0A%20%20%20*%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40param%20%7Bboolean%7D%20useLegacyOptimizations%20enable%20or%20disable%20legacy%20optimizations%20globally.%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2FPolymer.setLegacyOptimizations%3Dfunction(useLegacyOptimizations)%7BPolymer.legacyOptimizations%3DuseLegacyOptimizations%3B%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fsettings.html.js%0A",
            "totalBytes": 3665,
            "wastedBytes": 2636,
            "wastedPercent": 71.92360163710778
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
            "totalBytes": 5322,
            "wastedBytes": 2520,
            "wastedPercent": 47.35983153461437
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7D(function()%7B'use%20strict'%3B%2F**%0A%20%20%20*%20%40summary%20Collapse%20multiple%20callbacks%20into%20one%20invocation%20after%20a%20timer.%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%2Fvar%20Debouncer%3Dfunction()%7Bfunction%20Debouncer()%7B_classCallCheck(this%2CDebouncer)%3Bthis._asyncModule%3Dnull%3Bthis._callback%3Dnull%3Bthis._timer%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Sets%20the%20scheduler%3B%20that%20is%2C%20a%20module%20with%20the%20Async%20interface%2C%0A%20%20%20%20%20*%20a%20callback%20and%20optional%20arguments%20to%20be%20passed%20to%20the%20run%20function%0A%20%20%20%20%20*%20from%20the%20async%20module.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7B!AsyncInterface%7D%20asyncModule%20Object%20with%20Async%20interface.%0A%20%20%20%20%20*%20%40param%20%7Bfunction()%7D%20callback%20Callback%20to%20run.%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F_createClass(Debouncer%2C%5B%7Bkey%3A'setConfig'%2Cvalue%3Afunction%20setConfig(asyncModule%2Ccallback)%7Bvar%20_this%3Dthis%3Bthis._asyncModule%3DasyncModule%3Bthis._callback%3Dcallback%3Bthis._timer%3Dthis._asyncModule.run(function()%7B_this._timer%3Dnull%3B_this._callback()%3B%7D)%3B%7D%2F**%0A%20%20%20%20%20*%20Cancels%20an%20active%20debouncer%20and%20returns%20a%20reference%20to%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'cancel'%2Cvalue%3Afunction%20cancel()%7Bif(this.isActive())%7Bthis._asyncModule.cancel(this._timer)%3Bthis._timer%3Dnull%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Flushes%20an%20active%20debouncer%20and%20returns%20a%20reference%20to%20itself.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'flush'%2Cvalue%3Afunction%20flush()%7Bif(this.isActive())%7Bthis.cancel()%3Bthis._callback()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Returns%20true%20if%20the%20debouncer%20is%20active.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20active.%0A%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'isActive'%2Cvalue%3Afunction%20isActive()%7Breturn%20this._timer!%3Dnull%3B%7D%2F**%0A%20%20%20%20%20*%20Creates%20a%20debouncer%20if%20no%20debouncer%20is%20passed%20as%20a%20parameter%0A%20%20%20%20%20*%20or%20it%20cancels%20an%20active%20debouncer%20otherwise.%20The%20following%0A%20%20%20%20%20*%20example%20shows%20how%20a%20debouncer%20can%20be%20called%20multiple%20times%20within%20a%0A%20%20%20%20%20*%20microtask%20and%20%22debounced%22%20such%20that%20the%20provided%20callback%20function%20is%0A%20%20%20%20%20*%20called%20once.%20Add%20this%20method%20to%20a%20custom%20element%3A%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20_debounceWork()%20%7B%0A%20%20%20%20%20*%20%20%20this._debounceJob%20%3D%20Polymer.Debouncer.debounce(this._debounceJob%2C%0A%20%20%20%20%20*%20%20%20%20%20%20%20Polymer.Async.microTask%2C%20()%20%3D%3E%20%7B%0A%20%20%20%20%20*%20%20%20%20%20this._doWork()%3B%0A%20%20%20%20%20*%20%20%20%7D)%3B%0A%20%20%20%20%20*%20%7D%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20If%20the%20%60_debounceWork%60%20method%20is%20called%20multiple%20times%20within%20the%20same%0A%20%20%20%20%20*%20microtask%2C%20the%20%60_doWork%60%20function%20will%20be%20called%20only%20once%20at%20the%20next%0A%20%20%20%20%20*%20microtask%20checkpoint.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Note%3A%20In%20testing%20it%20is%20often%20convenient%20to%20avoid%20asynchrony.%20To%20accomplish%0A%20%20%20%20%20*%20this%20with%20a%20debouncer%2C%20you%20can%20use%20%60Polymer.enqueueDebouncer%60%20and%0A%20%20%20%20%20*%20%60Polymer.flush%60.%20For%20example%2C%20extend%20the%20above%20example%20by%20adding%0A%20%20%20%20%20*%20%60Polymer.enqueueDebouncer(this._debounceJob)%60%20at%20the%20end%20of%20the%0A%20%20%20%20%20*%20%60_debounceWork%60%20method.%20Then%20in%20a%20test%2C%20call%20%60Polymer.flush%60%20to%20ensure%0A%20%20%20%20%20*%20the%20debouncer%20has%20completed.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40param%20%7BDebouncer%3F%7D%20debouncer%20Debouncer%20object.%0A%20%20%20%20%20*%20%40param%20%7B!AsyncInterface%7D%20asyncModule%20Object%20with%20Async%20interface%0A%20%20%20%20%20*%20%40param%20%7Bfunction()%7D%20callback%20Callback%20to%20run.%0A%20%20%20%20%20*%20%40return%20%7B!Debouncer%7D%20Returns%20a%20debouncer%20object.%0A%20%20%20%20%20*%2F%7D%5D%2C%5B%7Bkey%3A'debounce'%2Cvalue%3Afunction%20debounce(debouncer%2CasyncModule%2Ccallback)%7Bif(debouncer%20instanceof%20Debouncer)%7Bdebouncer.cancel()%3B%7Delse%7Bdebouncer%3Dnew%20Debouncer()%3B%7Ddebouncer.setConfig(asyncModule%2Ccallback)%3Breturn%20debouncer%3B%7D%7D%5D)%3Breturn%20Debouncer%3B%7D()%3B%2F**%20%40const%20*%2FPolymer.Debouncer%3DDebouncer%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Fdebounce.html.js%0A",
            "totalBytes": 3961,
            "wastedBytes": 2367,
            "wastedPercent": 59.75763696036355
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3Bvar%20HOST_DIR%3D%2F%3Ahost%5C(%3Adir%5C((ltr%7Crtl)%5C)%5C)%2Fg%3Bvar%20HOST_DIR_REPLACMENT%3D'%3Ahost(%5Bdir%3D%22%241%22%5D)'%3Bvar%20EL_DIR%3D%2F(%5B%5Cs%5Cw-%23%5C.%5C%5B%5C%5D%5C*%5D*)%3Adir%5C((ltr%7Crtl)%5C)%2Fg%3Bvar%20EL_DIR_REPLACMENT%3D'%3Ahost(%5Bdir%3D%22%242%22%5D)%20%241'%3Bvar%20DIR_CHECK%3D%2F%3Adir%5C((%3F%3Altr%7Crtl)%5C)%2F%3Bvar%20SHIM_SHADOW%3DBoolean(window%5B'ShadyDOM'%5D%26%26window%5B'ShadyDOM'%5D%5B'inUse'%5D)%3B%2F**%0A%20%20%20%20%20*%20%40type%20%7B!Array%3C!Polymer_DirMixin%3E%7D%0A%20%20%20%20%20*%2Fvar%20DIR_INSTANCES%3D%5B%5D%3B%2F**%20%40type%20%7BMutationObserver%7D%20*%2Fvar%20observer%3Dnull%3Bvar%20DOCUMENT_DIR%3D''%3Bfunction%20getRTL()%7BDOCUMENT_DIR%3Ddocument.documentElement.getAttribute('dir')%3B%7D%2F**%0A%20%20%20%20%20*%20%40param%20%7B!Polymer_DirMixin%7D%20instance%20Instance%20to%20set%20RTL%20status%20on%0A%20%20%20%20%20*%2Ffunction%20setRTL(instance)%7Bif(!instance.__autoDirOptOut)%7Bvar%20el%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finstance%3Bel.setAttribute('dir'%2CDOCUMENT_DIR)%3B%7D%7Dfunction%20updateDirection()%7BgetRTL()%3BDOCUMENT_DIR%3Ddocument.documentElement.getAttribute('dir')%3Bfor(var%20i%3D0%3Bi%3CDIR_INSTANCES.length%3Bi%2B%2B)%7BsetRTL(DIR_INSTANCES%5Bi%5D)%3B%7D%7Dfunction%20takeRecords()%7Bif(observer%26%26observer.takeRecords().length)%7BupdateDirection()%3B%7D%7D%2F**%0A%20%20%20%20%20*%20Element%20class%20mixin%20that%20allows%20elements%20to%20use%20the%20%60%3Adir%60%20CSS%20Selector%20to%20have%0A%20%20%20%20%20*%20text%20direction%20specific%20styling.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20With%20this%20mixin%2C%20any%20stylesheet%20provided%20in%20the%20template%20will%20transform%20%60%3Adir%60%20into%0A%20%20%20%20%20*%20%60%3Ahost(%5Bdir%5D)%60%20and%20sync%20direction%20with%20the%20page%20via%20the%20element's%20%60dir%60%20attribute.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Elements%20can%20opt%20out%20of%20the%20global%20page%20text%20direction%20by%20setting%20the%20%60dir%60%20attribute%0A%20%20%20%20%20*%20directly%20in%20%60ready()%60%20or%20in%20HTML.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Caveats%3A%0A%20%20%20%20%20*%20-%20Applications%20must%20set%20%60%3Chtml%20dir%3D%22ltr%22%3E%60%20or%20%60%3Chtml%20dir%3D%22rtl%22%3E%60%20to%20sync%20direction%0A%20%20%20%20%20*%20-%20Automatic%20left-to-right%20or%20right-to-left%20styling%20is%20sync'd%20with%20the%20%60%3Chtml%3E%60%20element%20only.%0A%20%20%20%20%20*%20-%20Changing%20%60dir%60%20at%20runtime%20is%20supported.%0A%20%20%20%20%20*%20-%20Opting%20out%20of%20the%20global%20direction%20styling%20is%20permanent%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40mixinFunction%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20%20%20*%20%40memberof%20Polymer%0A%20%20%20%20%20*%2FPolymer.DirMixin%3DPolymer.dedupingMixin(function(base)%7Bif(!SHIM_SHADOW)%7Bif(!observer)%7BgetRTL()%3Bobserver%3Dnew%20MutationObserver(updateDirection)%3Bobserver.observe(document.documentElement%2C%7Battributes%3Atrue%2CattributeFilter%3A%5B'dir'%5D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20%20%20*%20%40extends%20%7Bbase%7D%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2Fvar%20elementBase%3DPolymer.PropertyAccessors(base)%3B%2F**%0A%20%20%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20%20%20*%20%40implements%20%7BPolymer_DirMixin%7D%0A%20%20%20%20%20%20%20*%2Fvar%20Dir%3Dfunction(_elementBase)%7B_inherits(Dir%2C_elementBase)%3B_createClass(Dir%2Cnull%2C%5B%7Bkey%3A'_processStyleText'%2C%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_processStyleText(cssText%2CbaseURI)%7BcssText%3D_get(Dir.__proto__%7C%7CObject.getPrototypeOf(Dir)%2C'_processStyleText'%2Cthis).call(this%2CcssText%2CbaseURI)%3Bif(!SHIM_SHADOW%26%26DIR_CHECK.test(cssText))%7BcssText%3Dthis._replaceDirInCssText(cssText)%3Bthis.__activateDir%3Dtrue%3B%7Dreturn%20cssText%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20Replace%20%60%3Adir%60%20in%20the%20given%20CSS%20text%0A%20%20%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20CSS%20text%20to%20replace%20DIR%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bstring%7D%20Modified%20CSS%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_replaceDirInCssText'%2Cvalue%3Afunction%20_replaceDirInCssText(text)%7Bvar%20replacedText%3Dtext%3BreplacedText%3DreplacedText.replace(HOST_DIR%2CHOST_DIR_REPLACMENT)%3BreplacedText%3DreplacedText.replace(EL_DIR%2CEL_DIR_REPLACMENT)%3Breturn%20replacedText%3B%7D%7D%5D)%3Bfunction%20Dir()%7B_classCallCheck(this%2CDir)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2Fvar%20_this%3D_possibleConstructorReturn(this%2C(Dir.__proto__%7C%7CObject.getPrototypeOf(Dir)).call(this))%3B_this.__autoDirOptOut%3Dfalse%3Breturn%20_this%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%20Closure%20doesn't%20understand%20that%20%60this%60%20is%20an%20HTMLElement%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F_createClass(Dir%2C%5B%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'ready'%2Cthis).call(this)%3Bthis.__autoDirOptOut%3D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Fthis.hasAttribute('dir')%3B%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20If%20it%20exists%20on%20elementBase%2C%20it%20can%20be%20super'd%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'connectedCallback'%2Cvalue%3Afunction%20connectedCallback()%7Bif(elementBase.prototype.connectedCallback)%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'connectedCallback'%2Cthis).call(this)%3B%7Dif(this.constructor.__activateDir)%7BtakeRecords()%3BDIR_INSTANCES.push(this)%3BsetRTL(this)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20If%20it%20exists%20on%20elementBase%2C%20it%20can%20be%20super'd%0A%20%20%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'disconnectedCallback'%2Cvalue%3Afunction%20disconnectedCallback()%7Bif(elementBase.prototype.disconnectedCallback)%7B_get(Dir.prototype.__proto__%7C%7CObject.getPrototypeOf(Dir.prototype)%2C'disconnectedCallback'%2Cthis).call(this)%3B%7Dif(this.constructor.__activateDir)%7Bvar%20idx%3DDIR_INSTANCES.indexOf(this)%3Bif(idx%3E-1)%7BDIR_INSTANCES.splice(idx%2C1)%3B%7D%7D%7D%7D%5D)%3Breturn%20Dir%3B%7D(elementBase)%3BDir.__activateDir%3Dfalse%3Breturn%20Dir%3B%7D)%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fdir-mixin.html.js%0A",
            "totalBytes": 6777,
            "wastedBytes": 2284,
            "wastedPercent": 33.70222812453888
          },
          {
            "url": "data:text/javascript;charset=utf-8,(function()%7B'use%20strict'%3Bvar%20scheduled%3Dfalse%3Bvar%20beforeRenderQueue%3D%5B%5D%3Bvar%20afterRenderQueue%3D%5B%5D%3Bfunction%20schedule()%7Bscheduled%3Dtrue%3B%2F%2F%20before%20next%20render%0ArequestAnimationFrame(function()%7Bscheduled%3Dfalse%3BflushQueue(beforeRenderQueue)%3B%2F%2F%20after%20the%20render%0AsetTimeout(function()%7BrunQueue(afterRenderQueue)%3B%7D)%3B%7D)%3B%7Dfunction%20flushQueue(queue)%7Bwhile(queue.length)%7BcallMethod(queue.shift())%3B%7D%7Dfunction%20runQueue(queue)%7Bfor(var%20i%3D0%2Cl%3Dqueue.length%3Bi%3Cl%3Bi%2B%2B)%7BcallMethod(queue.shift())%3B%7D%7Dfunction%20callMethod(info)%7Bvar%20context%3Dinfo%5B0%5D%3Bvar%20callback%3Dinfo%5B1%5D%3Bvar%20args%3Dinfo%5B2%5D%3Btry%7Bcallback.apply(context%2Cargs)%3B%7Dcatch(e)%7BsetTimeout(function()%7Bthrow%20e%3B%7D)%3B%7D%7Dfunction%20flush()%7Bwhile(beforeRenderQueue.length%7C%7CafterRenderQueue.length)%7BflushQueue(beforeRenderQueue)%3BflushQueue(afterRenderQueue)%3B%7Dscheduled%3Dfalse%3B%7D%2F**%0A%20%20%20*%20Module%20for%20scheduling%20flushable%20pre-render%20and%20post-render%20tasks.%0A%20%20%20*%0A%20%20%20*%20%40namespace%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Module%20for%20scheduling%20flushable%20pre-render%20and%20post-render%20tasks.%0A%20%20%20*%2FPolymer.RenderStatus%3D%7B%2F**%0A%20%20%20%20%20*%20Enqueues%20a%20callback%20which%20will%20be%20run%20before%20the%20next%20render%2C%20at%0A%20%20%20%20%20*%20%60requestAnimationFrame%60%20timing.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20useful%20for%20enqueuing%20work%20that%20requires%20DOM%20measurement%2C%0A%20%20%20%20%20*%20since%20measurement%20may%20not%20be%20reliable%20in%20custom%20element%20callbacks%20before%0A%20%20%20%20%20*%20the%20first%20render%2C%20as%20well%20as%20for%20batching%20measurement%20tasks%20in%20general.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20Tasks%20in%20this%20queue%20may%20be%20flushed%20by%20calling%20%60Polymer.RenderStatus.flush()%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20context%20Context%20object%20the%20callback%20function%20will%20be%20bound%20to%0A%20%20%20%20%20*%20%40param%20%7Bfunction(...*)%3Avoid%7D%20callback%20Callback%20function%0A%20%20%20%20%20*%20%40param%20%7B!Array%3D%7D%20args%20An%20array%20of%20arguments%20to%20call%20the%20callback%20function%20with%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FbeforeNextRender%3Afunction%20beforeNextRender(context%2Ccallback%2Cargs)%7Bif(!scheduled)%7Bschedule()%3B%7DbeforeRenderQueue.push(%5Bcontext%2Ccallback%2Cargs%5D)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Enqueues%20a%20callback%20which%20will%20be%20run%20after%20the%20next%20render%2C%20equivalent%0A%20%20%20%20%20*%20to%20one%20task%20(%60setTimeout%60)%20after%20the%20next%20%60requestAnimationFrame%60.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20This%20method%20is%20useful%20for%20tuning%20the%20first-render%20performance%20of%20an%0A%20%20%20%20%20*%20element%20or%20application%20by%20deferring%20non-critical%20work%20until%20after%20the%0A%20%20%20%20%20*%20first%20paint.%20%20Typical%20non-render-critical%20work%20may%20include%20adding%20UI%0A%20%20%20%20%20*%20event%20listeners%20and%20aria%20attributes.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20context%20Context%20object%20the%20callback%20function%20will%20be%20bound%20to%0A%20%20%20%20%20*%20%40param%20%7Bfunction(...*)%3Avoid%7D%20callback%20Callback%20function%0A%20%20%20%20%20*%20%40param%20%7B!Array%3D%7D%20args%20An%20array%20of%20arguments%20to%20call%20the%20callback%20function%20with%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2FafterNextRender%3Afunction%20afterNextRender(context%2Ccallback%2Cargs)%7Bif(!scheduled)%7Bschedule()%3B%7DafterRenderQueue.push(%5Bcontext%2Ccallback%2Cargs%5D)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20Flushes%20all%20%60beforeNextRender%60%20tasks%2C%20followed%20by%20all%20%60afterNextRender%60%0A%20%20%20%20%20*%20tasks.%0A%20%20%20%20%20*%0A%20%20%20%20%20*%20%40memberof%20Polymer.RenderStatus%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%2Fflush%3Aflush%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Futils%2Frender-status.html.js%0A",
            "totalBytes": 3121,
            "wastedBytes": 2072,
            "wastedPercent": 66.38897789170137
          }
        ],
        "overallSavingsMs": 150,
        "overallSavingsBytes": 290619,
        "sortedBy": [
          "wastedBytes"
        ],
        "debugData": {
          "type": "debugdata",
          "metricSavings": {
            "FCP": 0,
            "LCP": 150
          }
        }
      },
      "guidanceLevel": 3
    },
    "unused-css-rules": {
      "id": "unused-css-rules",
      "title": "Reduce unused CSS",
      "description": "Reduce unused rules from stylesheets and defer CSS not used for above-the-fold content to decrease bytes consumed by network activity. [Learn how to reduce unused CSS](https://developer.chrome.com/docs/lighthouse/performance/unused-css-rules/).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 0,
      "numericUnit": "millisecond",
      "displayValue": "",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "opportunity",
        "headings": [],
        "items": [],
        "overallSavingsMs": 0,
        "overallSavingsBytes": 0,
        "sortedBy": [
          "wastedBytes"
        ],
        "debugData": {
          "type": "debugdata",
          "metricSavings": {
            "FCP": 0,
            "LCP": 0
          }
        }
      },
      "guidanceLevel": 1
    },
    "unused-javascript": {
      "id": "unused-javascript",
      "title": "Reduce unused JavaScript",
      "description": "Reduce unused JavaScript and defer loading scripts until they are required to decrease bytes consumed by network activity. [Learn how to reduce unused JavaScript](https://developer.chrome.com/docs/lighthouse/performance/unused-javascript/).",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "numericValue": 150,
      "numericUnit": "millisecond",
      "displayValue": "Est savings of 144 KiB",
      "metricSavings": {
        "FCP": 150,
        "LCP": 150
      },
      "details": {
        "type": "opportunity",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "subItemsHeading": {
              "key": "source",
              "valueType": "code"
            },
            "label": "URL"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "subItemsHeading": {
              "key": "sourceBytes"
            },
            "label": "Transfer Size"
          },
          {
            "key": "wastedBytes",
            "valueType": "bytes",
            "subItemsHeading": {
              "key": "sourceWastedBytes"
            },
            "label": "Est Savings"
          }
        ],
        "items": [
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otBannerSdk.js",
            "totalBytes": 131284,
            "wastedBytes": 75695,
            "wastedPercent": 57.6575328805221
          },
          {
            "url": "data:text/javascript;charset=utf-8,var%20_createClass%3Dfunction()%7Bfunction%20defineProperties(target%2Cprops)%7Bfor(var%20i%3D0%3Bi%3Cprops.length%3Bi%2B%2B)%7Bvar%20descriptor%3Dprops%5Bi%5D%3Bdescriptor.enumerable%3Ddescriptor.enumerable%7C%7Cfalse%3Bdescriptor.configurable%3Dtrue%3Bif(%22value%22in%20descriptor)descriptor.writable%3Dtrue%3BObject.defineProperty(target%2Cdescriptor.key%2Cdescriptor)%3B%7D%7Dreturn%20function(Constructor%2CprotoProps%2CstaticProps)%7Bif(protoProps)defineProperties(Constructor.prototype%2CprotoProps)%3Bif(staticProps)defineProperties(Constructor%2CstaticProps)%3Breturn%20Constructor%3B%7D%3B%7D()%3Bvar%20_get%3Dfunction%20get(object%2Cproperty%2Creceiver)%7Bif(object%3D%3D%3Dnull)object%3DFunction.prototype%3Bvar%20desc%3DObject.getOwnPropertyDescriptor(object%2Cproperty)%3Bif(desc%3D%3D%3Dundefined)%7Bvar%20parent%3DObject.getPrototypeOf(object)%3Bif(parent%3D%3D%3Dnull)%7Breturn%20undefined%3B%7Delse%7Breturn%20get(parent%2Cproperty%2Creceiver)%3B%7D%7Delse%20if(%22value%22in%20desc)%7Breturn%20desc.value%3B%7Delse%7Bvar%20getter%3Ddesc.get%3Bif(getter%3D%3D%3Dundefined)%7Breturn%20undefined%3B%7Dreturn%20getter.call(receiver)%3B%7D%7D%3Bvar%20_typeof%3Dtypeof%20Symbol%3D%3D%3D%22function%22%26%26typeof%20Symbol.iterator%3D%3D%3D%22symbol%22%3Ffunction(obj)%7Breturn%20typeof%20obj%3B%7D%3Afunction(obj)%7Breturn%20obj%26%26typeof%20Symbol%3D%3D%3D%22function%22%26%26obj.constructor%3D%3D%3DSymbol%26%26obj!%3D%3DSymbol.prototype%3F%22symbol%22%3Atypeof%20obj%3B%7D%3Bfunction%20_classCallCheck(instance%2CConstructor)%7Bif(!(instance%20instanceof%20Constructor))%7Bthrow%20new%20TypeError(%22Cannot%20call%20a%20class%20as%20a%20function%22)%3B%7D%7Dfunction%20_possibleConstructorReturn(self%2Ccall)%7Bif(!self)%7Bthrow%20new%20ReferenceError(%22this%20hasn't%20been%20initialised%20-%20super()%20hasn't%20been%20called%22)%3B%7Dreturn%20call%26%26(typeof%20call%3D%3D%3D%22object%22%7C%7Ctypeof%20call%3D%3D%3D%22function%22)%3Fcall%3Aself%3B%7Dfunction%20_inherits(subClass%2CsuperClass)%7Bif(typeof%20superClass!%3D%3D%22function%22%26%26superClass!%3D%3Dnull)%7Bthrow%20new%20TypeError(%22Super%20expression%20must%20either%20be%20null%20or%20a%20function%2C%20not%20%22%2Btypeof%20superClass)%3B%7DsubClass.prototype%3DObject.create(superClass%26%26superClass.prototype%2C%7Bconstructor%3A%7Bvalue%3AsubClass%2Cenumerable%3Afalse%2Cwritable%3Atrue%2Cconfigurable%3Atrue%7D%7D)%3Bif(superClass)Object.setPrototypeOf%3FObject.setPrototypeOf(subClass%2CsuperClass)%3AsubClass.__proto__%3DsuperClass%3B%7D(function()%7B'use%20strict'%3B%2F**%20%40const%20%7BObject%7D%20*%2Fvar%20CaseMap%3DPolymer.CaseMap%3B%2F%2F%20Monotonically%20increasing%20unique%20ID%20used%20for%20de-duping%20effects%20triggered%0A%2F%2F%20from%20multiple%20properties%20in%20the%20same%20turn%0Avar%20dedupeId%3D0%3B%2F**%0A%20%20%20*%20Property%20effect%20types%3B%20effects%20are%20stored%20on%20the%20prototype%20using%20these%20keys%0A%20%20%20*%20%40enum%20%7Bstring%7D%0A%20%20%20*%2Fvar%20TYPES%3D%7BCOMPUTE%3A'__computeEffects'%2CREFLECT%3A'__reflectEffects'%2CNOTIFY%3A'__notifyEffects'%2CPROPAGATE%3A'__propagateEffects'%2COBSERVE%3A'__observeEffects'%2CREAD_ONLY%3A'__readOnly'%7D%3B%2F**%20%40const%20%7BRegExp%7D%20*%2Fvar%20capitalAttributeRegex%3D%2F%5BA-Z%5D%2F%3B%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20name%3A%20(string%20%7C%20undefined)%2C%0A%20%20%20*%20structured%3A%20(boolean%20%7C%20undefined)%2C%0A%20%20%20*%20wildcard%3A%20(boolean%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataTrigger%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20%40typedef%20%7B%7B%0A%20%20%20*%20info%3A%20%3F%2C%0A%20%20%20*%20trigger%3A%20(!DataTrigger%20%7C%20undefined)%2C%0A%20%20%20*%20fn%3A%20(!Function%20%7C%20undefined)%0A%20%20%20*%20%7D%7D%0A%20%20%20*%2Fvar%20DataEffect%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0Avar%20PropertyEffectsType%3Dvoid%200%3B%2F%2Feslint-disable-line%20no-unused-vars%0A%2F**%0A%20%20%20*%20Ensures%20that%20the%20model%20has%20an%20own-property%20map%20of%20effects%20for%20the%20given%20type.%0A%20%20%20*%20The%20model%20may%20be%20a%20prototype%20or%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20Property%20effects%20are%20stored%20as%20arrays%20of%20effects%20by%20property%20in%20a%20map%2C%0A%20%20%20*%20by%20named%20type%20on%20the%20model.%20e.g.%0A%20%20%20*%0A%20%20%20*%20%20%20__computeEffects%3A%20%7B%0A%20%20%20*%20%20%20%20%20foo%3A%20%5B%20...%20%5D%2C%0A%20%20%20*%20%20%20%20%20bar%3A%20%5B%20...%20%5D%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20If%20the%20model%20does%20not%20yet%20have%20an%20effect%20map%20for%20the%20type%2C%20one%20is%20created%0A%20%20%20*%20and%20returned.%20%20If%20it%20does%2C%20but%20it%20is%20not%20an%20own%20property%20(i.e.%20the%0A%20%20%20*%20prototype%20had%20effects)%2C%20the%20the%20map%20is%20deeply%20cloned%20and%20the%20copy%20is%0A%20%20%20*%20set%20on%20the%20model%20and%20returned%2C%20ready%20for%20new%20effects%20to%20be%20added.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Property%20effect%20type%0A%20%20%20*%20%40return%20%7BObject%7D%20The%20own-property%20map%20of%20effects%20for%20the%20given%20type%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20ensureOwnEffectMap(model%2Ctype)%7Bvar%20effects%3Dmodel%5Btype%5D%3Bif(!effects)%7Beffects%3Dmodel%5Btype%5D%3D%7B%7D%3B%7Delse%20if(!model.hasOwnProperty(type))%7Beffects%3Dmodel%5Btype%5D%3DObject.create(model%5Btype%5D)%3Bfor(var%20p%20in%20effects)%7Bvar%20protoFx%3Deffects%5Bp%5D%3Bvar%20instFx%3Deffects%5Bp%5D%3DArray(protoFx.length)%3Bfor(var%20i%3D0%3Bi%3CprotoFx.length%3Bi%2B%2B)%7BinstFx%5Bi%5D%3DprotoFx%5Bi%5D%3B%7D%7D%7Dreturn%20effects%3B%7D%2F%2F%20--%20effects%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Runs%20all%20effects%20of%20a%20given%20type%20for%20the%20given%20set%20of%20property%20changes%0A%20%20%20*%20on%20an%20instance.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%3D%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffects(inst%2Ceffects%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bif(effects)%7Bvar%20ran%3Dfalse%3Bvar%20id%3DdedupeId%2B%2B%3Bfor(var%20prop%20in%20props)%7Bif(runEffectsForProperty(inst%2Ceffects%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs))%7Bran%3Dtrue%3B%7D%7Dreturn%20ran%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Runs%20a%20list%20of%20effects%20for%20a%20given%20property.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20effects%20Object%20map%20of%20property-to-Array%20of%20effects%0A%20%20%20*%20%40param%20%7Bnumber%7D%20dedupeId%20Counter%20used%20for%20de-duping%20effects%0A%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Name%20of%20changed%20property%0A%20%20%20*%20%40param%20%7B*%7D%20props%20Changed%20properties%0A%20%20%20*%20%40param%20%7B*%7D%20oldProps%20Old%20properties%0A%20%20%20*%20%40param%20%7Bboolean%3D%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7B*%3D%7D%20extraArgs%20Additional%20metadata%20to%20pass%20to%20effect%20function%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20an%20effect%20ran%20for%20this%20property%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runEffectsForProperty(inst%2Ceffects%2CdedupeId%2Cprop%2Cprops%2ColdProps%2ChasPaths%2CextraArgs)%7Bvar%20ran%3Dfalse%3Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(prop)%3Aprop%3Bvar%20fxs%3Deffects%5BrootProperty%5D%3Bif(fxs)%7Bfor(var%20i%3D0%2Cl%3Dfxs.length%2Cfx%3Bi%3Cl%26%26(fx%3Dfxs%5Bi%5D)%3Bi%2B%2B)%7Bif((!fx.info%7C%7Cfx.info.lastRun!%3D%3DdedupeId)%26%26(!hasPaths%7C%7CpathMatchesTrigger(prop%2Cfx.trigger)))%7Bif(fx.info)%7Bfx.info.lastRun%3DdedupeId%3B%7Dfx.fn(inst%2Cprop%2Cprops%2ColdProps%2Cfx.info%2ChasPaths%2CextraArgs)%3Bran%3Dtrue%3B%7D%7D%7Dreturn%20ran%3B%7D%2F**%0A%20%20%20*%20Determines%20whether%20a%20property%2Fpath%20that%20has%20changed%20matches%20the%20trigger%0A%20%20%20*%20criteria%20for%20an%20effect.%20%20A%20trigger%20is%20a%20descriptor%20with%20the%20following%0A%20%20%20*%20structure%2C%20which%20matches%20the%20descriptors%20returned%20from%20%60parseArg%60.%0A%20%20%20*%20e.g.%20for%20%60foo.bar.*%60%3A%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20trigger%3A%20%7B%0A%20%20%20*%20%20%20name%3A%20'a.b'%2C%0A%20%20%20*%20%20%20structured%3A%20true%2C%0A%20%20%20*%20%20%20wildcard%3A%20true%0A%20%20%20*%20%7D%0A%20%20%20*%20%60%60%60%0A%20%20%20*%20If%20no%20trigger%20is%20given%2C%20the%20path%20is%20deemed%20to%20match.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20or%20property%20that%20changed%0A%20%20%20*%20%40param%20%7BDataTrigger%7D%20trigger%20Descriptor%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Whether%20the%20path%20matched%20the%20trigger%0A%20%20%20*%2Ffunction%20pathMatchesTrigger(path%2Ctrigger)%7Bif(trigger)%7Bvar%20triggerPath%3Dtrigger.name%3Breturn%20triggerPath%3D%3Dpath%7C%7Ctrigger.structured%26%26Polymer.Path.isAncestor(triggerPath%2Cpath)%7C%7Ctrigger.wildcard%26%26Polymer.Path.isDescendant(triggerPath%2Cpath)%3B%7Delse%7Breturn%20true%3B%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22observer%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Calls%20the%20method%20with%20%60info.methodName%60%20on%20the%20instance%2C%20passing%20the%0A%20%20%20*%20new%20and%20old%20values.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runObserverEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20fn%3Dtypeof%20info.method%3D%3D%3D%22string%22%3Finst%5Binfo.method%5D%3Ainfo.method%3Bvar%20changedProp%3Dinfo.property%3Bif(fn)%7Bfn.call(inst%2Cinst.__data%5BchangedProp%5D%2ColdProps%5BchangedProp%5D)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('observer%20method%20%60'%2Binfo.method%2B'%60%20not%20defined')%3B%7D%7D%2F**%0A%20%20%20*%20Runs%20%22notify%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20will%20dispatch%20path%20notification%20events%20in%20the%20case%20that%20the%20property%0A%20%20%20*%20changed%20was%20a%20path%20and%20the%20root%20property%20for%20that%20path%20didn't%20have%20a%0A%20%20%20*%20%22notify%22%20effect.%20%20This%20is%20to%20maintain%201.0%20behavior%20that%20did%20not%20require%0A%20%20%20*%20%60notify%3A%20true%60%20to%20ensure%20object%20sub-property%20notifications%20were%0A%20%20%20*%20sent.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20with%20effects%20to%20run%0A%20%20%20*%20%40param%20%7BObject%7D%20notifyProps%20Bag%20of%20properties%20to%20notify%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffects(inst%2CnotifyProps%2Cprops%2ColdProps%2ChasPaths)%7B%2F%2F%20Notify%0Avar%20fxs%3Dinst%5BTYPES.NOTIFY%5D%3Bvar%20notified%3Dvoid%200%3Bvar%20id%3DdedupeId%2B%2B%3B%2F%2F%20Try%20normal%20notify%20effects%3B%20if%20none%2C%20fall%20back%20to%20try%20path%20notification%0Afor(var%20prop%20in%20notifyProps)%7Bif(notifyProps%5Bprop%5D)%7Bif(fxs%26%26runEffectsForProperty(inst%2Cfxs%2Cid%2Cprop%2Cprops%2ColdProps%2ChasPaths))%7Bnotified%3Dtrue%3B%7Delse%20if(hasPaths%26%26notifyPath(inst%2Cprop%2Cprops))%7Bnotified%3Dtrue%3B%7D%7D%7D%2F%2F%20Flush%20host%20if%20we%20actually%20notified%20and%20host%20was%20batching%0A%2F%2F%20And%20the%20host%20has%20already%20initialized%20clients%3B%20this%20prevents%0A%2F%2F%20an%20issue%20with%20a%20host%20observing%20data%20changes%20before%20clients%20are%20ready.%0Avar%20host%3Dvoid%200%3Bif(notified%26%26(host%3Dinst.__dataHost)%26%26host._invalidateProperties)%7Bhost._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20with%20path%20information%20in%20the%20detail%0A%20%20%20*%20object%20to%20indicate%20a%20sub-path%20of%20the%20property%20was%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20that%20was%20changed%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20path%20was%20notified%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifyPath(inst%2Cpath%2Cprops)%7Bvar%20rootProperty%3DPolymer.Path.root(path)%3Bif(rootProperty!%3D%3Dpath)%7Bvar%20eventName%3DPolymer.CaseMap.camelToDashCase(rootProperty)%2B'-changed'%3BdispatchNotifyEvent(inst%2CeventName%2Cprops%5Bpath%5D%2Cpath)%3Breturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20*%20Dispatches%20%7Bproperty%7D-changed%20events%20to%20indicate%20a%20property%20(or%20path)%0A%20%20%20*%20changed.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20element%20from%20which%20to%20fire%20the%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20eventName%20The%20name%20of%20the%20event%20to%20send%20('%7Bproperty%7D-changed')%0A%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20of%20the%20changed%20property%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20null%20%7C%20undefined%7D%20path%20If%20a%20sub-path%20of%20this%20property%20changed%2C%20the%20path%0A%20%20%20*%20%20%20that%20changed%20(optional).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%20%40suppress%20%7BinvalidCasts%7D%0A%20%20%20*%2Ffunction%20dispatchNotifyEvent(inst%2CeventName%2Cvalue%2Cpath)%7Bvar%20detail%3D%7Bvalue%3Avalue%2CqueueProperty%3Atrue%7D%3Bif(path)%7Bdetail.path%3Dpath%3B%7D%2F**%20%40type%20%7B!HTMLElement%7D%20*%2Finst.dispatchEvent(new%20CustomEvent(eventName%2C%7Bdetail%3Adetail%7D))%3B%7D%2F**%0A%20%20%20*%20Implements%20the%20%22notify%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Dispatches%20a%20non-bubbling%20event%20named%20%60info.eventName%60%20on%20the%20instance%0A%20%20%20*%20with%20a%20detail%20object%20containing%20the%20new%20%60value%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runNotifyEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo%2ChasPaths)%7Bvar%20rootProperty%3DhasPaths%3FPolymer.Path.root(property)%3Aproperty%3Bvar%20path%3DrootProperty!%3Dproperty%3Fproperty%3Anull%3Bvar%20value%3Dpath%3FPolymer.Path.get(inst%2Cpath)%3Ainst.__data%5Bproperty%5D%3Bif(path%26%26value%3D%3D%3Dundefined)%7Bvalue%3Dprops%5Bproperty%5D%3B%2F%2F%20specifically%20for%20.splices%0A%7DdispatchNotifyEvent(inst%2Cinfo.eventName%2Cvalue%2Cpath)%3B%7D%2F**%0A%20%20%20*%20Handler%20function%20for%202-way%20notification%20events.%20Receives%20context%0A%20%20%20*%20information%20captured%20in%20the%20%60addNotifyListener%60%20closure%20from%20the%0A%20%20%20*%20%60__notifyListeners%60%20metadata.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20value%20of%20the%20notified%20property%20to%20the%20host%20property%20or%20path.%20%20If%0A%20%20%20*%20the%20event%20contained%20path%20information%2C%20translate%20that%20path%20to%20the%20host%0A%20%20%20*%20scope's%20name%20for%20that%20path%20first.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BCustomEvent%7D%20event%20Notification%20event%20(e.g.%20'%3Cproperty%3E-changed')%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20handling%20the%20notification%20event%0A%20%20%20*%20%40param%20%7Bstring%7D%20fromProp%20Child%20element%20property%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bstring%7D%20toPath%20Host%20property%2Fpath%20that%20was%20bound%0A%20%20%20*%20%40param%20%7Bboolean%7D%20negate%20Whether%20the%20binding%20was%20negated%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20handleNotification(event%2Cinst%2CfromProp%2CtoPath%2Cnegate)%7Bvar%20value%3Dvoid%200%3Bvar%20detail%3D%2F**%20%40type%20%7BObject%7D%20*%2Fevent.detail%3Bvar%20fromPath%3Ddetail%26%26detail.path%3Bif(fromPath)%7BtoPath%3DPolymer.Path.translate(fromProp%2CtoPath%2CfromPath)%3Bvalue%3Ddetail%26%26detail.value%3B%7Delse%7Bvalue%3Devent.currentTarget%5BfromProp%5D%3B%7Dvalue%3Dnegate%3F!value%3Avalue%3Bif(!inst%5BTYPES.READ_ONLY%5D%7C%7C!inst%5BTYPES.READ_ONLY%5D%5BtoPath%5D)%7Bif(inst._setPendingPropertyOrPath(toPath%2Cvalue%2Ctrue%2CBoolean(fromPath))%26%26(!detail%7C%7C!detail.queueProperty))%7Binst._invalidateProperties()%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22reflect%22%20effect.%0A%20%20%20*%0A%20%20%20*%20Sets%20the%20attribute%20named%20%60info.attrName%60%20to%20the%20given%20property%20value.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runReflectEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20value%3Dinst.__data%5Bproperty%5D%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cinfo.attrName%2C'attribute'%2C%2F**%20%40type%20%7BNode%7D%20*%2Finst)%3B%7Dinst._propertyToAttribute(property%2Cinfo.attrName%2Cvalue)%3B%7D%2F**%0A%20%20%20*%20Runs%20%22computed%22%20effects%20for%20a%20set%20of%20changed%20properties.%0A%20%20%20*%0A%20%20%20*%20This%20method%20differs%20from%20the%20generic%20%60runEffects%60%20method%20in%20that%20it%0A%20%20%20*%20continues%20to%20run%20computed%20effects%20based%20on%20the%20output%20of%20each%20pass%20until%0A%20%20%20*%20there%20are%20no%20more%20newly%20computed%20properties.%20%20This%20ensures%20that%20all%0A%20%20%20*%20properties%20that%20will%20be%20computed%20by%20the%20initial%20set%20of%20changes%20are%0A%20%20%20*%20computed%20before%20other%20effects%20(binding%20propagation%2C%20observers%2C%20and%20notify)%0A%20%20%20*%20run.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffects(inst%2CchangedProps%2ColdProps%2ChasPaths)%7Bvar%20computeEffects%3Dinst%5BTYPES.COMPUTE%5D%3Bif(computeEffects)%7Bvar%20inputProps%3DchangedProps%3Bwhile(runEffects(inst%2CcomputeEffects%2CinputProps%2ColdProps%2ChasPaths))%7BObject.assign(oldProps%2Cinst.__dataOld)%3BObject.assign(changedProps%2Cinst.__dataPending)%3BinputProps%3Dinst.__dataPending%3Binst.__dataPending%3Dnull%3B%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22computed%20property%22%20effect%20by%20running%20the%20method%20with%20the%0A%20%20%20*%20values%20of%20the%20arguments%20specified%20in%20the%20%60info%60%20object%20and%20setting%20the%0A%20%20%20*%20return%20value%20to%20the%20computed%20property%20specified.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runComputedEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7Bvar%20result%3DrunMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%3Bvar%20computedProp%3Dinfo.methodInfo%3Bif(inst.__dataHasAccessor%26%26inst.__dataHasAccessor%5BcomputedProp%5D)%7Binst._setPendingProperty(computedProp%2Cresult%2Ctrue)%3B%7Delse%7Binst%5BcomputedProp%5D%3Dresult%3B%7D%7D%2F**%0A%20%20%20*%20Computes%20path%20changes%20based%20on%20path%20links%20set%20up%20using%20the%20%60linkPaths%60%0A%20%20%20*%20API.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20whose%20props%20are%20changing%0A%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3C(string%7Cnumber)%3E%7D%20path%20Path%20that%20has%20changed%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20of%20changed%20path%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeLinkedPaths(inst%2Cpath%2Cvalue)%7Bvar%20links%3Dinst.__dataLinkedPaths%3Bif(links)%7Bvar%20link%3Dvoid%200%3Bfor(var%20a%20in%20links)%7Bvar%20b%3Dlinks%5Ba%5D%3Bif(Polymer.Path.isDescendant(a%2Cpath))%7Blink%3DPolymer.Path.translate(a%2Cb%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7Delse%20if(Polymer.Path.isDescendant(b%2Cpath))%7Blink%3DPolymer.Path.translate(b%2Ca%2Cpath)%3Binst._setPendingPropertyOrPath(link%2Cvalue%2Ctrue%2Ctrue)%3B%7D%7D%7D%7D%2F%2F%20--%20bindings%20----------------------------------------------%0A%2F**%0A%20%20%20*%20Adds%20binding%20metadata%20to%20the%20current%20%60nodeInfo%60%2C%20and%20binding%20effects%0A%20%20%20*%20for%20all%20part%20dependencies%20to%20%60templateInfo%60.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20*%20%40param%20%7Bstring%7D%20kind%20Binding%20kind%2C%20either%20'property'%2C%20'attribute'%2C%20or%20'text'%0A%20%20%20*%20%40param%20%7Bstring%7D%20target%20Target%20property%20name%0A%20%20%20*%20%40param%20%7B!Array%3C!BindingPart%3E%7D%20parts%20Array%20of%20binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bstring%3D%7D%20literal%20Literal%20text%20surrounding%20binding%20parts%20(specified%0A%20%20%20*%20%20%20only%20for%20'property'%20bindings%2C%20since%20these%20must%20be%20initialized%20as%20part%0A%20%20%20*%20%20%20of%20boot-up)%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addBinding(constructor%2CtemplateInfo%2CnodeInfo%2Ckind%2Ctarget%2Cparts%2Cliteral)%7B%2F%2F%20Create%20binding%20metadata%20and%20add%20to%20nodeInfo%0AnodeInfo.bindings%3DnodeInfo.bindings%7C%7C%5B%5D%3Bvar%2F**%20Binding%20*%2Fbinding%3D%7Bkind%3Akind%2Ctarget%3Atarget%2Cparts%3Aparts%2Cliteral%3Aliteral%2CisCompound%3Aparts.length!%3D%3D1%7D%3BnodeInfo.bindings.push(binding)%3B%2F%2F%20Add%20listener%20info%20to%20binding%20metadata%0Aif(shouldAddListener(binding))%7Bvar%20_binding%24parts%24%3Dbinding.parts%5B0%5D%2Cevent%3D_binding%24parts%24.event%2Cnegate%3D_binding%24parts%24.negate%3Bbinding.listenerEvent%3Devent%7C%7CCaseMap.camelToDashCase(target)%2B'-changed'%3Bbinding.listenerNegate%3Dnegate%3B%7D%2F%2F%20Add%20%22propagate%22%20property%20effects%20to%20templateInfo%0Avar%20index%3DtemplateInfo.nodeInfoList.length%3Bfor(var%20i%3D0%3Bi%3Cbinding.parts.length%3Bi%2B%2B)%7Bvar%20part%3Dbinding.parts%5Bi%5D%3Bpart.compoundIndex%3Di%3BaddEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%3B%7D%7D%2F**%0A%20%20%20*%20Adds%20property%20effects%20to%20the%20given%20%60templateInfo%60%20for%20the%20given%20binding%0A%20%20%20*%20part.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BFunction%7D%20constructor%20Class%20that%20%60_parseTemplate%60%20is%20currently%0A%20%20%20*%20%20%20running%20on%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20into%20%60nodeInfoList%60%20for%20this%20node%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%2Ffunction%20addEffectForBindingPart(constructor%2CtemplateInfo%2Cbinding%2Cpart%2Cindex)%7Bif(!part.literal)%7Bif(binding.kind%3D%3D%3D'attribute'%26%26binding.target%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Cannot%20set%20attribute%20'%2Bbinding.target%2B'%20because%20%22-%22%20is%20not%20a%20valid%20attribute%20starting%20character')%3B%7Delse%7Bvar%20dependencies%3Dpart.dependencies%3Bvar%20info%3D%7Bindex%3Aindex%2Cbinding%3Abinding%2Cpart%3Apart%2Cevaluator%3Aconstructor%7D%3Bfor(var%20j%3D0%3Bj%3Cdependencies.length%3Bj%2B%2B)%7Bvar%20trigger%3Ddependencies%5Bj%5D%3Bif(typeof%20trigger%3D%3D'string')%7Btrigger%3DparseArg(trigger)%3Btrigger.wildcard%3Dtrue%3B%7Dconstructor._addTemplatePropertyEffect(templateInfo%2Ctrigger.rootProperty%2C%7Bfn%3ArunBindingEffect%2Cinfo%3Ainfo%2Ctrigger%3Atrigger%7D)%3B%7D%7D%7D%7D%2F**%0A%20%20%20*%20Implements%20the%20%22binding%22%20(property%2Fpath%20binding)%20effect.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20binding%20syntax%20is%20overridable%20via%20%60_parseBindings%60%20and%0A%20%20%20*%20%60_evaluateBinding%60.%20%20This%20method%20will%20call%20%60_evaluateBinding%60%20for%20any%0A%20%20%20*%20non-literal%20parts%20returned%20from%20%60_parseBindings%60.%20%20However%2C%0A%20%20%20*%20there%20is%20no%20support%20for%20_path_%20bindings%20via%20custom%20binding%20parts%2C%0A%20%20%20*%20as%20this%20is%20specific%20to%20Polymer's%20path%20binding%20syntax.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20*%20%40param%20%7BArray%7D%20nodeList%20List%20of%20nodes%20associated%20with%20%60nodeInfoList%60%20template%0A%20%20%20*%20%20%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runBindingEffect(inst%2Cpath%2Cprops%2ColdProps%2Cinfo%2ChasPaths%2CnodeList)%7Bvar%20node%3DnodeList%5Binfo.index%5D%3Bvar%20binding%3Dinfo.binding%3Bvar%20part%3Dinfo.part%3B%2F%2F%20Subpath%20notification%3A%20transform%20path%20and%20set%20to%20client%0A%2F%2F%20e.g.%3A%20foo%3D%22%7B%7Bobj.sub%7D%7D%22%2C%20path%3A%20'obj.sub.prop'%2C%20set%20'foo.prop'%3Dobj.sub.prop%0Aif(hasPaths%26%26part.source%26%26path.length%3Epart.source.length%26%26binding.kind%3D%3D'property'%26%26!binding.isCompound%26%26node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bbinding.target%5D)%7Bvar%20value%3Dprops%5Bpath%5D%3Bpath%3DPolymer.Path.translate(part.source%2Cbinding.target%2Cpath)%3Bif(node._setPendingPropertyOrPath(path%2Cvalue%2Cfalse%2Ctrue))%7Binst._enqueueClient(node)%3B%7D%7Delse%7Bvar%20_value%3Dinfo.evaluator._evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%3B%2F%2F%20Propagate%20value%20to%20child%0AapplyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2C_value)%3B%7D%7D%2F**%0A%20%20%20*%20Sets%20the%20value%20for%20an%20%22binding%22%20(binding)%20effect%20to%20a%20node%2C%0A%20%20%20*%20either%20as%20a%20property%20or%20attribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20owning%20the%20binding%20effect%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Target%20node%20for%20binding%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20applyBindingValue(inst%2Cnode%2Cbinding%2Cpart%2Cvalue)%7Bvalue%3DcomputeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%3Bif(Polymer.sanitizeDOMValue)%7Bvalue%3DPolymer.sanitizeDOMValue(value%2Cbinding.target%2Cbinding.kind%2Cnode)%3B%7Dif(binding.kind%3D%3D'attribute')%7B%2F%2F%20Attribute%20binding%0Ainst._valueToNodeAttribute(%2F**%20%40type%20%7BElement%7D%20*%2Fnode%2Cvalue%2Cbinding.target)%3B%7Delse%7B%2F%2F%20Property%20binding%0Avar%20prop%3Dbinding.target%3Bif(node.__isPropertyEffectsClient%26%26node.__dataHasAccessor%26%26node.__dataHasAccessor%5Bprop%5D)%7Bif(!node%5BTYPES.READ_ONLY%5D%7C%7C!node%5BTYPES.READ_ONLY%5D%5Bprop%5D)%7Bif(node._setPendingProperty(prop%2Cvalue))%7Binst._enqueueClient(node)%3B%7D%7D%7Delse%7Binst._setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%3B%7D%7D%7D%2F**%0A%20%20%20*%20Transforms%20an%20%22binding%22%20effect%20value%20based%20on%20compound%20%26%20negation%0A%20%20%20*%20effect%20metadata%2C%20as%20well%20as%20handling%20for%20special-case%20properties%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20the%20value%20will%20be%20set%20to%0A%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40param%20%7B!BindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Transformed%20value%20to%20set%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20computeBindingValue(node%2Cvalue%2Cbinding%2Cpart)%7Bif(binding.isCompound)%7Bvar%20storage%3Dnode.__dataCompoundStorage%5Bbinding.target%5D%3Bstorage%5Bpart.compoundIndex%5D%3Dvalue%3Bvalue%3Dstorage.join('')%3B%7Dif(binding.kind!%3D%3D'attribute')%7B%2F%2F%20Some%20browsers%20serialize%20%60undefined%60%20to%20%60%22undefined%22%60%0Aif(binding.target%3D%3D%3D'textContent'%7C%7Cbinding.target%3D%3D%3D'value'%26%26(node.localName%3D%3D%3D'input'%7C%7Cnode.localName%3D%3D%3D'textarea'))%7Bvalue%3Dvalue%3D%3Dundefined%3F''%3Avalue%3B%7D%7Dreturn%20value%3B%7D%2F**%0A%20%20%20*%20Returns%20true%20if%20a%20binding's%20metadata%20meets%20all%20the%20requirements%20to%20allow%0A%20%20%20*%202-way%20binding%2C%20and%20therefore%20a%20%60%3Cproperty%3E-changed%60%20event%20listener%20should%20be%0A%20%20%20*%20added%3A%0A%20%20%20*%20-%20used%20curly%20braces%0A%20%20%20*%20-%20is%20a%20property%20(not%20attribute)%20binding%0A%20%20%20*%20-%20is%20not%20a%20textContent%20binding%0A%20%20%20*%20-%20is%20not%20compound%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Binding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%202-way%20listener%20should%20be%20added%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20shouldAddListener(binding)%7Breturn%20Boolean(binding.target)%26%26binding.kind!%3D'attribute'%26%26binding.kind!%3D'text'%26%26!binding.isCompound%26%26binding.parts%5B0%5D.mode%3D%3D%3D'%7B'%3B%7D%2F**%0A%20%20%20*%20Setup%20compound%20binding%20storage%20structures%2C%20notify%20listeners%2C%20and%20dataHost%0A%20%20%20*%20references%20onto%20the%20bound%20nodeList.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20that%20bas%20been%20previously%20bound%0A%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupBindings(inst%2CtemplateInfo)%7B%2F%2F%20Setup%20compound%20storage%2C%20dataHost%2C%20and%20notify%20listeners%0Avar%20nodeList%3DtemplateInfo.nodeList%2CnodeInfoList%3DtemplateInfo.nodeInfoList%3Bif(nodeInfoList.length)%7Bfor(var%20i%3D0%3Bi%3CnodeInfoList.length%3Bi%2B%2B)%7Bvar%20info%3DnodeInfoList%5Bi%5D%3Bvar%20node%3DnodeList%5Bi%5D%3Bvar%20bindings%3Dinfo.bindings%3Bif(bindings)%7Bfor(var%20_i%3D0%3B_i%3Cbindings.length%3B_i%2B%2B)%7Bvar%20binding%3Dbindings%5B_i%5D%3BsetupCompoundStorage(node%2Cbinding)%3BaddNotifyListener(node%2Cinst%2Cbinding)%3B%7D%7Dnode.__dataHost%3Dinst%3B%7D%7D%7D%2F**%0A%20%20%20*%20Initializes%20%60__dataCompoundStorage%60%20local%20storage%20on%20a%20bound%20node%20with%0A%20%20%20*%20initial%20literal%20data%20for%20compound%20bindings%2C%20and%20sets%20the%20joined%0A%20%20%20*%20literal%20parts%20to%20the%20bound%20property.%0A%20%20%20*%0A%20%20%20*%20When%20changes%20to%20compound%20parts%20occur%2C%20they%20are%20first%20set%20into%20the%20compound%0A%20%20%20*%20storage%20array%20for%20that%20property%2C%20and%20then%20the%20array%20is%20joined%20to%20result%20in%0A%20%20%20*%20the%20final%20value%20set%20to%20the%20property%2Fattribute.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BNode%7D%20node%20Bound%20node%20to%20initialize%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20setupCompoundStorage(node%2Cbinding)%7Bif(binding.isCompound)%7B%2F%2F%20Create%20compound%20storage%20map%0Avar%20storage%3Dnode.__dataCompoundStorage%7C%7C(node.__dataCompoundStorage%3D%7B%7D)%3Bvar%20parts%3Dbinding.parts%3B%2F%2F%20Copy%20literals%20from%20parts%20into%20storage%20for%20this%20binding%0Avar%20literals%3Dnew%20Array(parts.length)%3Bfor(var%20j%3D0%3Bj%3Cparts.length%3Bj%2B%2B)%7Bliterals%5Bj%5D%3Dparts%5Bj%5D.literal%3B%7Dvar%20target%3Dbinding.target%3Bstorage%5Btarget%5D%3Dliterals%3B%2F%2F%20Configure%20properties%20with%20their%20literal%20parts%0Aif(binding.literal%26%26binding.kind%3D%3D'property')%7Bnode%5Btarget%5D%3Dbinding.literal%3B%7D%7D%7D%2F**%0A%20%20%20*%20Adds%20a%202-way%20binding%20notification%20event%20listener%20to%20the%20node%20specified%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BObject%7D%20node%20Child%20element%20to%20add%20listener%20to%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Host%20element%20instance%20to%20handle%20notification%20event%0A%20%20%20*%20%40param%20%7BBinding%7D%20binding%20Binding%20metadata%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20addNotifyListener(node%2Cinst%2Cbinding)%7Bif(binding.listenerEvent)%7Bvar%20part%3Dbinding.parts%5B0%5D%3Bnode.addEventListener(binding.listenerEvent%2Cfunction(e)%7BhandleNotification(e%2Cinst%2Cbinding.target%2Cpart.source%2Cpart.negate)%3B%7D)%3B%7D%7D%2F%2F%20--%20for%20method-based%20effects%20(complexObserver%20%26%20computed)%20--------------%0A%2F**%0A%20%20%20*%20Adds%20property%20effects%20for%20each%20argument%20in%20the%20method%20signature%20(and%0A%20%20%20*%20optionally%2C%20for%20the%20method%20name%20if%20%60dynamic%60%20is%20true)%20that%20calls%20the%0A%20%20%20*%20provided%20effect%20function.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7BElement%20%7C%20Object%7D%20model%20Prototype%20or%20instance%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%0A%20%20%20*%20%40param%20%7Bstring%7D%20type%20Type%20of%20property%20effect%20to%20add%0A%20%20%20*%20%40param%20%7BFunction%7D%20effectFn%20Function%20to%20run%20when%20arguments%20change%0A%20%20%20*%20%40param%20%7B*%3D%7D%20methodInfo%20Effect-specific%20information%20to%20be%20included%20in%0A%20%20%20*%20%20%20method%20effect%20metadata%0A%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%20Note%2C%0A%20%20%20*%20%20%20defaults%20to%20true%20if%20the%20signature%20is%20static%20(sig.static%20is%20true).%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20createMethodEffect(model%2Csig%2Ctype%2CeffectFn%2CmethodInfo%2CdynamicFn)%7BdynamicFn%3Dsig.static%7C%7CdynamicFn%26%26((typeof%20dynamicFn%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(dynamicFn))!%3D%3D'object'%7C%7CdynamicFn%5Bsig.methodName%5D)%3Bvar%20info%3D%7BmethodName%3Asig.methodName%2Cargs%3Asig.args%2CmethodInfo%3AmethodInfo%2CdynamicFn%3AdynamicFn%7D%3Bfor(var%20i%3D0%2Carg%3Bi%3Csig.args.length%26%26(arg%3Dsig.args%5Bi%5D)%3Bi%2B%2B)%7Bif(!arg.literal)%7Bmodel._addPropertyEffect(arg.rootProperty%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%2Ctrigger%3Aarg%7D)%3B%7D%7Dif(dynamicFn)%7Bmodel._addPropertyEffect(sig.methodName%2Ctype%2C%7Bfn%3AeffectFn%2Cinfo%3Ainfo%7D)%3B%7D%7D%2F**%0A%20%20%20*%20Calls%20a%20method%20with%20arguments%20marshaled%20from%20properties%20on%20the%20instance%0A%20%20%20*%20based%20on%20the%20method%20signature%20contained%20in%20the%20effect%20metadata.%0A%20%20%20*%0A%20%20%20*%20Multi-property%20observers%2C%20computed%20properties%2C%20and%20inline%20computing%0A%20%20%20*%20functions%20call%20this%20function%20to%20invoke%20the%20method%2C%20then%20use%20the%20return%0A%20%20%20*%20value%20accordingly.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20The%20instance%20the%20effect%20will%20be%20run%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20property%0A%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20*%20%40param%20%7B%3F%7D%20info%20Effect%20metadata%0A%20%20%20*%20%40return%20%7B*%7D%20Returns%20the%20return%20value%20from%20the%20method%20invocation%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20runMethodEffect(inst%2Cproperty%2Cprops%2ColdProps%2Cinfo)%7B%2F%2F%20Instances%20can%20optionally%20have%20a%20_methodHost%20which%20allows%20redirecting%20where%0A%2F%2F%20to%20find%20methods.%20Currently%20used%20by%20%60templatize%60.%0Avar%20context%3Dinst._methodHost%7C%7Cinst%3Bvar%20fn%3Dcontext%5Binfo.methodName%5D%3Bif(fn)%7Bvar%20args%3Dinst._marshalArgs(info.args%2Cproperty%2Cprops)%3Breturn%20fn.apply(context%2Cargs)%3B%7Delse%20if(!info.dynamicFn)%7Bconsole.warn('method%20%60'%2Binfo.methodName%2B'%60%20not%20defined')%3B%7D%7Dvar%20emptyArray%3D%5B%5D%3B%2F%2F%20Regular%20expressions%20used%20for%20binding%0Avar%20IDENT%3D'(%3F%3A'%2B'%5Ba-zA-Z_%24%5D%5B%5C%5Cw.%3A%24%5C%5C-*%5D*'%2B')'%3Bvar%20NUMBER%3D'(%3F%3A'%2B'%5B-%2B%5D%3F%5B0-9%5D*%5C%5C.%3F%5B0-9%5D%2B(%3F%3A%5BeE%5D%5B-%2B%5D%3F%5B0-9%5D%2B)%3F'%2B')'%3Bvar%20SQUOTE_STRING%3D'(%3F%3A'%2B'%5C'(%3F%3A%5B%5E%5C'%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%5C''%2B')'%3Bvar%20DQUOTE_STRING%3D'(%3F%3A'%2B'%22(%3F%3A%5B%5E%22%5C%5C%5C%5C%5D%7C%5C%5C%5C%5C.)*%22'%2B')'%3Bvar%20STRING%3D'(%3F%3A'%2BSQUOTE_STRING%2B'%7C'%2BDQUOTE_STRING%2B')'%3Bvar%20ARGUMENT%3D'(%3F%3A('%2BIDENT%2B'%7C'%2BNUMBER%2B'%7C'%2BSTRING%2B')%5C%5Cs*'%2B')'%3Bvar%20ARGUMENTS%3D'(%3F%3A'%2BARGUMENT%2B'(%3F%3A%2C%5C%5Cs*'%2BARGUMENT%2B')*'%2B')'%3Bvar%20ARGUMENT_LIST%3D'(%3F%3A'%2B'%5C%5C(%5C%5Cs*'%2B'(%3F%3A'%2BARGUMENTS%2B'%3F'%2B')'%2B'%5C%5C)%5C%5Cs*'%2B')'%3Bvar%20BINDING%3D'('%2BIDENT%2B'%5C%5Cs*'%2BARGUMENT_LIST%2B'%3F'%2B')'%3B%2F%2F%20Group%203%0Avar%20OPEN_BRACKET%3D'(%5C%5C%5B%5C%5C%5B%7C%7B%7B)'%2B'%5C%5Cs*'%3Bvar%20CLOSE_BRACKET%3D'(%3F%3A%5D%5D%7C%7D%7D)'%3Bvar%20NEGATE%3D'(%3F%3A(!)%5C%5Cs*)%3F'%3B%2F%2F%20Group%202%0Avar%20EXPRESSION%3DOPEN_BRACKET%2BNEGATE%2BBINDING%2BCLOSE_BRACKET%3Bvar%20bindingRegex%3Dnew%20RegExp(EXPRESSION%2C%22g%22)%3B%2F**%0A%20%20%20*%20Create%20a%20string%20from%20binding%20parts%20of%20all%20the%20literal%20parts%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3CBindingPart%3E%7D%20parts%20All%20parts%20to%20stringify%0A%20%20%20*%20%40return%20%7Bstring%7D%20String%20made%20from%20the%20literal%20parts%0A%20%20%20*%2Ffunction%20literalFromParts(parts)%7Bvar%20s%3D''%3Bfor(var%20i%3D0%3Bi%3Cparts.length%3Bi%2B%2B)%7Bvar%20literal%3Dparts%5Bi%5D.literal%3Bs%2B%3Dliteral%7C%7C''%3B%7Dreturn%20s%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20expression%20string%20for%20a%20method%20signature%2C%20and%20returns%20a%20metadata%0A%20%20%20*%20describing%20the%20method%20in%20terms%20of%20%60methodName%60%2C%20%60static%60%20(whether%20all%20the%0A%20%20%20*%20arguments%20are%20literals)%2C%20and%20an%20array%20of%20%60args%60%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20expression%20The%20expression%20to%20parse%0A%20%20%20*%20%40return%20%7B%3FMethodSignature%7D%20The%20method%20metadata%20object%20if%20a%20method%20expression%20was%0A%20%20%20*%20%20%20found%2C%20otherwise%20%60undefined%60%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseMethod(expression)%7B%2F%2F%20tries%20to%20match%20valid%20javascript%20property%20names%0Avar%20m%3Dexpression.match(%2F(%5B%5E%5Cs%5D%2B%3F)%5C((%5B%5Cs%5CS%5D*)%5C)%2F)%3Bif(m)%7Bvar%20methodName%3Dm%5B1%5D%3Bvar%20sig%3D%7BmethodName%3AmethodName%2Cstatic%3Atrue%2Cargs%3AemptyArray%7D%3Bif(m%5B2%5D.trim())%7B%2F%2F%20replace%20escaped%20commas%20with%20comma%20entity%2C%20split%20on%20un-escaped%20commas%0Avar%20args%3Dm%5B2%5D.replace(%2F%5C%5C%2C%2Fg%2C'%26comma%3B').split('%2C')%3Breturn%20parseArgs(args%2Csig)%3B%7Delse%7Breturn%20sig%3B%7D%7Dreturn%20null%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20array%20of%20arguments%20and%20sets%20the%20%60args%60%20property%20of%20the%20supplied%0A%20%20%20*%20signature%20metadata%20object.%20Sets%20the%20%60static%60%20property%20to%20false%20if%20any%0A%20%20%20*%20argument%20is%20a%20non-literal.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!Array%3Cstring%3E%7D%20argList%20Array%20of%20argument%20names%0A%20%20%20*%20%40param%20%7B!MethodSignature%7D%20sig%20Method%20signature%20metadata%20object%0A%20%20%20*%20%40return%20%7B!MethodSignature%7D%20The%20updated%20signature%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArgs(argList%2Csig)%7Bsig.args%3DargList.map(function(rawArg)%7Bvar%20arg%3DparseArg(rawArg)%3Bif(!arg.literal)%7Bsig.static%3Dfalse%3B%7Dreturn%20arg%3B%7D%2Cthis)%3Breturn%20sig%3B%7D%2F**%0A%20%20%20*%20Parses%20an%20individual%20argument%2C%20and%20returns%20an%20argument%20metadata%20object%0A%20%20%20*%20with%20the%20following%20fields%3A%0A%20%20%20*%0A%20%20%20*%20%20%20%7B%0A%20%20%20*%20%20%20%20%20value%3A%20'prop'%2C%20%20%20%20%20%20%20%20%2F%2F%20property%2Fpath%20or%20literal%20value%0A%20%20%20*%20%20%20%20%20literal%3A%20false%2C%20%20%20%20%20%20%20%2F%2F%20whether%20argument%20is%20a%20literal%0A%20%20%20*%20%20%20%20%20structured%3A%20false%2C%20%20%20%20%2F%2F%20whether%20the%20property%20is%20a%20path%0A%20%20%20*%20%20%20%20%20rootProperty%3A%20'prop'%2C%20%2F%2F%20the%20root%20property%20of%20the%20path%0A%20%20%20*%20%20%20%20%20wildcard%3A%20false%20%20%20%20%20%20%20%2F%2F%20whether%20the%20argument%20was%20a%20wildcard%20'.*'%20path%0A%20%20%20*%20%20%20%7D%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20rawArg%20The%20string%20value%20of%20the%20argument%0A%20%20%20*%20%40return%20%7B!MethodArg%7D%20Argument%20metadata%20object%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20parseArg(rawArg)%7B%2F%2F%20clean%20up%20whitespace%0Avar%20arg%3DrawArg.trim()%2F%2F%20replace%20comma%20entity%20with%20comma%0A.replace(%2F%26comma%3B%2Fg%2C'%2C')%2F%2F%20repair%20extra%20escape%20sequences%3B%20note%20only%20commas%20strictly%20need%0A%2F%2F%20escaping%2C%20but%20we%20allow%20any%20other%20char%20to%20be%20escaped%20since%20its%0A%2F%2F%20likely%20users%20will%20do%20this%0A.replace(%2F%5C%5C(.)%2Fg%2C'%5C%241')%3B%2F%2F%20basic%20argument%20descriptor%0Avar%20a%3D%7Bname%3Aarg%2Cvalue%3A''%2Cliteral%3Afalse%7D%3B%2F%2F%20detect%20literal%20value%20(must%20be%20String%20or%20Number)%0Avar%20fc%3Darg%5B0%5D%3Bif(fc%3D%3D%3D'-')%7Bfc%3Darg%5B1%5D%3B%7Dif(fc%3E%3D'0'%26%26fc%3C%3D'9')%7Bfc%3D'%23'%3B%7Dswitch(fc)%7Bcase%22'%22%3Acase'%22'%3Aa.value%3Darg.slice(1%2C-1)%3Ba.literal%3Dtrue%3Bbreak%3Bcase'%23'%3Aa.value%3DNumber(arg)%3Ba.literal%3Dtrue%3Bbreak%3B%7D%2F%2F%20if%20not%20literal%2C%20look%20for%20structured%20path%0Aif(!a.literal)%7Ba.rootProperty%3DPolymer.Path.root(arg)%3B%2F%2F%20detect%20structured%20path%20(has%20dots)%0Aa.structured%3DPolymer.Path.isPath(arg)%3Bif(a.structured)%7Ba.wildcard%3Darg.slice(-2)%3D%3D'.*'%3Bif(a.wildcard)%7Ba.name%3Darg.slice(0%2C-2)%3B%7D%7D%7Dreturn%20a%3B%7D%2F%2F%20data%20api%0A%2F**%0A%20%20%20*%20Sends%20array%20splice%20notifications%20(%60.splices%60%20and%20%60.length%60)%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20_notifySplices(inst%2Carray%2Cpath%2Csplices)%7Bvar%20splicesPath%3Dpath%2B'.splices'%3Binst.notifyPath(splicesPath%2C%7BindexSplices%3Asplices%7D)%3Binst.notifyPath(path%2B'.length'%2Carray.length)%3B%2F%2F%20Null%20here%20to%20allow%20potentially%20large%20splice%20records%20to%20be%20GC'ed.%0Ainst.__data%5BsplicesPath%5D%3D%7BindexSplices%3Anull%7D%3B%7D%2F**%0A%20%20%20*%20Creates%20a%20splice%20record%20and%20sends%20an%20array%20splice%20notification%20for%0A%20%20%20*%20the%20described%20mutation%0A%20%20%20*%0A%20%20%20*%20Note%3A%20this%20implementation%20only%20accepts%20normalized%20paths%0A%20%20%20*%0A%20%20%20*%20%40param%20%7B!PropertyEffectsType%7D%20inst%20Instance%20to%20send%20notifications%20to%0A%20%20%20*%20%40param%20%7BArray%7D%20array%20The%20array%20the%20mutations%20occurred%20on%0A%20%20%20*%20%40param%20%7Bstring%7D%20path%20The%20path%20to%20the%20array%20that%20was%20mutated%0A%20%20%20*%20%40param%20%7Bnumber%7D%20index%20Index%20at%20which%20the%20array%20mutation%20occurred%0A%20%20%20*%20%40param%20%7Bnumber%7D%20addedCount%20Number%20of%20added%20items%0A%20%20%20*%20%40param%20%7BArray%7D%20removed%20Array%20of%20removed%20items%0A%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20notifySplice(inst%2Carray%2Cpath%2Cindex%2CaddedCount%2Cremoved)%7B_notifySplices(inst%2Carray%2Cpath%2C%5B%7Bindex%3Aindex%2CaddedCount%3AaddedCount%2Cremoved%3Aremoved%2Cobject%3Aarray%2Ctype%3A'splice'%7D%5D)%3B%7D%2F**%0A%20%20%20*%20Returns%20an%20upper-cased%20version%20of%20the%20string.%0A%20%20%20*%0A%20%20%20*%20%40param%20%7Bstring%7D%20name%20String%20to%20uppercase%0A%20%20%20*%20%40return%20%7Bstring%7D%20Uppercased%20string%0A%20%20%20*%20%40private%0A%20%20%20*%2Ffunction%20upper(name)%7Breturn%20name%5B0%5D.toUpperCase()%2Bname.substring(1)%3B%7D%2F**%0A%20%20%20*%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%20template%0A%20%20%20*%20binding%20and%20data%20observation%20(collectively%2C%20%22property%20effects%22)%20system.%0A%20%20%20*%0A%20%20%20*%20This%20mixin%20uses%20provides%20the%20following%20key%20static%20methods%20for%20adding%0A%20%20%20*%20property%20effects%20to%20an%20element%20class%3A%0A%20%20%20*%20-%20%60addPropertyEffect%60%0A%20%20%20*%20-%20%60createPropertyObserver%60%0A%20%20%20*%20-%20%60createMethodObserver%60%0A%20%20%20*%20-%20%60createNotifyingProperty%60%0A%20%20%20*%20-%20%60createReadOnlyProperty%60%0A%20%20%20*%20-%20%60createReflectedProperty%60%0A%20%20%20*%20-%20%60createComputedProperty%60%0A%20%20%20*%20-%20%60bindTemplate%60%0A%20%20%20*%0A%20%20%20*%20Each%20method%20creates%20one%20or%20more%20property%20accessors%2C%20along%20with%20metadata%0A%20%20%20*%20used%20by%20this%20mixin's%20implementation%20of%20%60_propertiesChanged%60%20to%20perform%0A%20%20%20*%20the%20property%20effects.%0A%20%20%20*%0A%20%20%20*%20Underscored%20versions%20of%20the%20above%20methods%20also%20exist%20on%20the%20element%0A%20%20%20*%20prototype%20for%20adding%20property%20effects%20on%20instances%20at%20runtime.%0A%20%20%20*%0A%20%20%20*%20Note%20that%20this%20mixin%20overrides%20several%20%60PropertyAccessors%60%20methods%2C%20in%0A%20%20%20*%20many%20cases%20to%20maintain%20guarantees%20provided%20by%20the%20Polymer%201.x%20features%3B%0A%20%20%20*%20notably%20it%20changes%20property%20accessors%20to%20be%20synchronous%20by%20default%0A%20%20%20*%20whereas%20the%20default%20when%20using%20%60PropertyAccessors%60%20standalone%20is%20to%20be%0A%20%20%20*%20async%20by%20default.%0A%20%20%20*%0A%20%20%20*%20%40mixinFunction%0A%20%20%20*%20%40polymer%0A%20%20%20*%20%40appliesMixin%20Polymer.TemplateStamp%0A%20%20%20*%20%40appliesMixin%20Polymer.PropertyAccessors%0A%20%20%20*%20%40memberof%20Polymer%0A%20%20%20*%20%40summary%20Element%20class%20mixin%20that%20provides%20meta-programming%20for%20Polymer's%0A%20%20%20*%20template%20binding%20and%20data%20observation%20system.%0A%20%20%20*%2FPolymer.PropertyEffects%3DPolymer.dedupingMixin(function(superClass)%7B%2F**%0A%20%20%20%20%20*%20%40constructor%0A%20%20%20%20%20*%20%40extends%20%7BsuperClass%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyAccessors%7D%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_TemplateStamp%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%20%40private%0A%20%20%20%20%20*%2Fvar%20propertyEffectsBase%3DPolymer.TemplateStamp(Polymer.PropertyAccessors(superClass))%3B%2F**%0A%20%20%20%20%20*%20%40polymer%0A%20%20%20%20%20*%20%40mixinClass%0A%20%20%20%20%20*%20%40implements%20%7BPolymer_PropertyEffects%7D%0A%20%20%20%20%20*%20%40extends%20%7BpropertyEffectsBase%7D%0A%20%20%20%20%20*%20%40unrestricted%0A%20%20%20%20%20*%2Fvar%20PropertyEffects%3Dfunction(_propertyEffectsBase)%7B_inherits(PropertyEffects%2C_propertyEffectsBase)%3Bfunction%20PropertyEffects()%7B_classCallCheck(this%2CPropertyEffects)%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F%2F%2F%20Used%20to%20identify%20users%20of%20this%20mixin%2C%20ala%20instanceof%0Avar%20_this%3D_possibleConstructorReturn(this%2C(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)).call(this))%3B_this.__isPropertyEffectsClient%3Dtrue%3B%2F**%20%40type%20%7Bnumber%7D%20*%2F%2F%2F%20NOTE%3A%20used%20to%20track%20re-entrant%20calls%20to%20%60_flushProperties%60%0A%2F%2F%20path%20changes%20dirty%20check%20against%20%60__dataTemp%60%20only%20during%20one%20%22turn%22%0A%2F%2F%20and%20are%20cleared%20when%20%60__dataCounter%60%20returns%20to%200.%0A_this.__dataCounter%3D0%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsReady%3B%2F**%20%40type%20%7BArray%7D%20*%2F_this.__dataPendingClients%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataToNotify%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataLinkedPaths%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataHasPaths%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__dataCompoundStorage%3B%2F**%20%40type%20%7BPolymer_PropertyEffects%7D%20*%2F_this.__dataHost%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataTemp%3B%2F**%20%40type%20%7Bboolean%7D%20*%2F_this.__dataClientsInitialized%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__data%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataPending%3B%2F**%20%40type%20%7B!Object%7D%20*%2F_this.__dataOld%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__computeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__reflectEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__notifyEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__propagateEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__observeEffects%3B%2F**%20%40type%20%7BObject%7D%20*%2F_this.__readOnly%3B%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2F_this.__templateInfo%3Breturn%20_this%3B%7D_createClass(PropertyEffects%2C%5B%7Bkey%3A'_initializeProperties'%2C%2F**%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_initializeProperties()%7B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_initializeProperties'%2Cthis).call(this)%3BhostStack.registerHost(this)%3Bthis.__dataClientsReady%3Dfalse%3Bthis.__dataPendingClients%3Dnull%3Bthis.__dataToNotify%3Dnull%3Bthis.__dataLinkedPaths%3Dnull%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20May%20be%20set%20on%20instance%20prior%20to%20upgrade%0Athis.__dataCompoundStorage%3Dthis.__dataCompoundStorage%7C%7Cnull%3Bthis.__dataHost%3Dthis.__dataHost%7C%7Cnull%3Bthis.__dataTemp%3D%7B%7D%3Bthis.__dataClientsInitialized%3Dfalse%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20provide%20a%0A%20%20%20%20%20%20%20*%20more%20efficient%20implementation%20of%20initializing%20properties%20from%0A%20%20%20%20%20%20%20*%20the%20prototype%20on%20the%20instance.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20prototype%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeProtoProperties'%2Cvalue%3Afunction%20_initializeProtoProperties(props)%7Bthis.__data%3DObject.create(props)%3Bthis.__dataPending%3DObject.create(props)%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60Polymer.PropertyAccessors%60%20implementation%20to%20avoid%20setting%0A%20%20%20%20%20%20%20*%20%60_setProperty%60's%20%60shouldNotify%3A%20true%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Properties%20to%20initialize%20on%20the%20instance%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_initializeInstanceProperties'%2Cvalue%3Afunction%20_initializeInstanceProperties(props)%7Bvar%20readOnly%3Dthis%5BTYPES.READ_ONLY%5D%3Bfor(var%20prop%20in%20props)%7Bif(!readOnly%7C%7C!readOnly%5Bprop%5D)%7Bthis.__dataPending%3Dthis.__dataPending%7C%7C%7B%7D%3Bthis.__dataOld%3Dthis.__dataOld%7C%7C%7B%7D%3Bthis.__data%5Bprop%5D%3Dthis.__dataPending%5Bprop%5D%3Dprops%5Bprop%5D%3B%7D%7D%7D%2F%2F%20Prototype%20setup%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60addPropertyEffect%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_addPropertyEffect'%2Cvalue%3Afunction%20_addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis._createPropertyAccessor(property%2Ctype%3D%3DTYPES.READ_ONLY)%3B%2F%2F%20effects%20are%20accumulated%20into%20arrays%20per%20property%20based%20on%20type%0Avar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bif(!effects)%7Beffects%3Dthis%5Btype%5D%5Bproperty%5D%3D%5B%5D%3B%7Deffects.push(effect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20the%20given%20property%20effect.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20the%20effect%20was%20associated%20with%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%20to%20remove%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removePropertyEffect'%2Cvalue%3Afunction%20_removePropertyEffect(property%2Ctype%2Ceffect)%7Bvar%20effects%3DensureOwnEffectMap(this%2Ctype)%5Bproperty%5D%3Bvar%20idx%3Deffects.indexOf(effect)%3Bif(idx%3E%3D0)%7Beffects.splice(idx%2C1)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20property%20effect%0A%20%20%20%20%20%20%20*%20of%20a%20certain%20type.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%3D%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasPropertyEffect'%2Cvalue%3Afunction%20_hasPropertyEffect(property%2Ctype)%7Bvar%20effects%3Dthis%5Btype%5D%3Breturn%20Boolean(effects%26%26effects%5Bproperty%5D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22read%20only%22%0A%20%20%20%20%20%20%20*%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReadOnlyEffect'%2Cvalue%3Afunction%20_hasReadOnlyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.READ_ONLY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22notify%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasNotifyEffect'%2Cvalue%3Afunction%20_hasNotifyEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.NOTIFY)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22reflect%20to%20attribute%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasReflectEffect'%2Cvalue%3Afunction%20_hasReflectEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.REFLECT)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Returns%20whether%20the%20current%20prototype%2Finstance%20has%20a%20%22computed%22%0A%20%20%20%20%20%20%20*%20property%20effect%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20True%20if%20the%20prototype%2Finstance%20has%20an%20effect%20of%20this%20type%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_hasComputedEffect'%2Cvalue%3Afunction%20_hasComputedEffect(property)%7Breturn%20this._hasPropertyEffect(property%2CTYPES.COMPUTE)%3B%7D%2F%2F%20Runtime%20----------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20pending%20property%20or%20path.%20%20If%20the%20root%20property%20of%20the%20path%20in%0A%20%20%20%20%20%20%20*%20question%20had%20no%20accessor%2C%20the%20path%20is%20set%2C%20otherwise%20it%20is%20enqueued%0A%20%20%20%20%20%20%20*%20via%20%60_setPendingProperty%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20function%20isolates%20relatively%20expensive%20functionality%20necessary%0A%20%20%20%20%20%20%20*%20for%20the%20public%20API%20(%60set%60%2C%20%60setProperties%60%2C%20%60notifyPath%60%2C%20and%20property%0A%20%20%20%20%20%20%20*%20change%20listeners%20via%20%7B%7B...%7D%7D%20bindings)%2C%20such%20that%20it%20is%20only%20done%0A%20%20%20%20%20%20%20*%20when%20paths%20enter%20the%20system%2C%20and%20not%20at%20every%20propagation%20step.%20%20It%0A%20%20%20%20%20%20%20*%20also%20sets%20a%20%60__dataHasPaths%60%20flag%20on%20the%20instance%20which%20is%20used%20to%0A%20%20%20%20%20%20%20*%20fast-path%20slower%20path-matching%20code%20in%20the%20property%20effects%20host%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%60path%60%20can%20be%20a%20path%20string%20or%20array%20of%20path%20parts%20as%20accepted%20by%20the%0A%20%20%20%20%20%20%20*%20public%20API.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cnumber%7Cstring%3E%7D%20path%20Path%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20Set%20to%20true%20if%20this%20change%20should%0A%20%20%20%20%20%20%20*%20%20cause%20a%20property%20notification%20event%20dispatch%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20isPathNotification%20If%20the%20path%20being%20set%20is%20a%20path%0A%20%20%20%20%20%20%20*%20%20%20notification%20of%20an%20already%20changed%20value%2C%20as%20opposed%20to%20a%20request%0A%20%20%20%20%20%20%20*%20%20%20to%20set%20and%20notify%20the%20change.%20%20In%20the%20latter%20%60false%60%20case%2C%20a%20dirty%0A%20%20%20%20%20%20%20*%20%20%20check%20is%20performed%20and%20then%20the%20value%20is%20set%20to%20the%20path%20before%0A%20%20%20%20%20%20%20*%20%20%20enqueuing%20the%20pending%20property%20change.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%2Fpath%20was%20enqueued%20in%0A%20%20%20%20%20%20%20*%20%20%20the%20pending%20changes%20bag.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingPropertyOrPath'%2Cvalue%3Afunction%20_setPendingPropertyOrPath(path%2Cvalue%2CshouldNotify%2CisPathNotification)%7Bif(isPathNotification%7C%7CPolymer.Path.root(Array.isArray(path)%3Fpath%5B0%5D%3Apath)!%3D%3Dpath)%7B%2F%2F%20Dirty%20check%20changes%20being%20set%20to%20a%20path%20against%20the%20actual%20object%2C%0A%2F%2F%20since%20this%20is%20the%20entry%20point%20for%20paths%20into%20the%20system%3B%20from%20here%0A%2F%2F%20the%20only%20dirty%20checks%20are%20against%20the%20%60__dataTemp%60%20cache%20to%20prevent%0A%2F%2F%20duplicate%20work%20in%20the%20same%20turn%20only.%20Note%2C%20if%20this%20was%20a%20notification%0A%2F%2F%20of%20a%20change%20already%20set%20to%20a%20path%20(isPathNotification%3A%20true)%2C%0A%2F%2F%20we%20always%20let%20the%20change%20through%20and%20skip%20the%20%60set%60%20since%20it%20was%0A%2F%2F%20already%20dirty%20checked%20at%20the%20point%20of%20entry%20and%20the%20underlying%0A%2F%2F%20object%20has%20already%20been%20updated%0Aif(!isPathNotification)%7Bvar%20old%3DPolymer.Path.get(this%2Cpath)%3Bpath%3D%2F**%20%40type%20%7Bstring%7D%20*%2FPolymer.Path.set(this%2Cpath%2Cvalue)%3B%2F%2F%20Use%20property-accessor's%20simpler%20dirty%20check%0Aif(!path%7C%7C!_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_shouldPropertyChange'%2Cthis).call(this%2Cpath%2Cvalue%2Cold))%7Breturn%20false%3B%7D%7Dthis.__dataHasPaths%3Dtrue%3Bif(this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify))%7BcomputeLinkedPaths(this%2Cpath%2Cvalue)%3Breturn%20true%3B%7D%7Delse%7Bif(this.__dataHasAccessor%26%26this.__dataHasAccessor%5Bpath%5D)%7Breturn%20this._setPendingProperty(%2F**%40type%7Bstring%7D*%2Fpath%2Cvalue%2CshouldNotify)%3B%7Delse%7Bthis%5Bpath%5D%3Dvalue%3B%7D%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Applies%20a%20value%20to%20a%20non-Polymer%20element%2Fnode's%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20implementation%20makes%20a%20best-effort%20at%20binding%20interop%3A%0A%20%20%20%20%20%20%20*%20Some%20native%20element%20properties%20have%20side-effects%20when%0A%20%20%20%20%20%20%20*%20re-setting%20the%20same%20value%20(e.g.%20setting%20%60%3Cinput%3E.value%60%20resets%20the%0A%20%20%20%20%20%20%20*%20cursor%20position)%2C%20so%20we%20do%20a%20dirty-check%20before%20setting%20the%20value.%0A%20%20%20%20%20%20%20*%20However%2C%20for%20better%20interop%20with%20non-Polymer%20custom%20elements%20that%0A%20%20%20%20%20%20%20*%20accept%20objects%2C%20we%20explicitly%20re-set%20object%20changes%20coming%20from%20the%0A%20%20%20%20%20%20%20*%20Polymer%20world%20(which%20may%20include%20deep%20object%20changes%20without%20the%0A%20%20%20%20%20%20%20*%20top%20reference%20changing)%2C%20erring%20on%20the%20side%20of%20providing%20more%0A%20%20%20%20%20%20%20*%20information.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Users%20may%20override%20this%20method%20to%20provide%20alternate%20approaches.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Node%7D%20node%20The%20node%20to%20set%20a%20property%20on%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20The%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20The%20value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setUnmanagedPropertyToNode'%2Cvalue%3Afunction%20_setUnmanagedPropertyToNode(node%2Cprop%2Cvalue)%7B%2F%2F%20It%20is%20a%20judgment%20call%20that%20resetting%20primitives%20is%0A%2F%2F%20%22bad%22%20and%20resettings%20objects%20is%20also%20%22good%22%3B%20alternatively%20we%20could%0A%2F%2F%20implement%20a%20whitelist%20of%20tag%20%26%20property%20values%20that%20should%20never%0A%2F%2F%20be%20reset%20(e.g.%20%3Cinput%3E.value%20%26%26%20%3Cselect%3E.value)%0Aif(value!%3D%3Dnode%5Bprop%5D%7C%7C(typeof%20value%3D%3D%3D'undefined'%3F'undefined'%3A_typeof(value))%3D%3D'object')%7Bnode%5Bprop%5D%3Dvalue%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20the%20%60PropertiesChanged%60%20implementation%20to%20introduce%20special%0A%20%20%20%20%20%20%20*%20dirty%20check%20logic%20depending%20on%20the%20property%20%26%20value%20being%20set%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20Any%20value%20set%20to%20a%20path%20(e.g.%20'obj.prop'%3A%2042%20or%20'obj.prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%2C%20dirty%20checked%20against%20%60__dataTemp%60%0A%20%20%20%20%20%20%20*%202.%20Object%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%20%7B...%7D)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__dataTemp%60%20and%20%60__data%60%2C%20dirty%20checked%20against%0A%20%20%20%20%20%20%20*%20%20%20%20%60__dataTemp%60%20by%20default%20implementation%20of%20%60_shouldPropertyChange%60%0A%20%20%20%20%20%20%20*%203.%20Primitive%20value%20set%20to%20simple%20property%20(e.g.%20'prop'%3A%2042)%0A%20%20%20%20%20%20%20*%20%20%20%20Stored%20in%20%60__data%60%2C%20dirty%20checked%20against%20%60__data%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20dirty-check%20is%20important%20to%20prevent%20cycles%20due%20to%20two-way%0A%20%20%20%20%20%20%20*%20notification%2C%20but%20paths%20and%20objects%20are%20only%20dirty%20checked%20against%20any%0A%20%20%20%20%20%20%20*%20previous%20value%20set%20during%20this%20turn%20via%20a%20%22temporary%20cache%22%20that%20is%0A%20%20%20%20%20%20%20*%20cleared%20when%20the%20last%20%60_propertiesChanged%60%20exits.%20This%20is%20so%3A%0A%20%20%20%20%20%20%20*%20a.%20any%20cached%20array%20paths%20(e.g.%20'array.3.prop')%20may%20be%20invalidated%0A%20%20%20%20%20%20%20*%20%20%20%20due%20to%20array%20mutations%20like%20shift%2Funshift%2Fsplice%3B%20this%20is%20fine%0A%20%20%20%20%20%20%20*%20%20%20%20since%20path%20changes%20are%20dirty-checked%20at%20user%20entry%20points%20like%20%60set%60%0A%20%20%20%20%20%20%20*%20b.%20dirty-checking%20for%20objects%20only%20lasts%20one%20turn%20to%20allow%20the%20user%0A%20%20%20%20%20%20%20*%20%20%20%20to%20mutate%20the%20object%20in-place%20and%20re-set%20it%20with%20the%20same%20identity%0A%20%20%20%20%20%20%20*%20%20%20%20and%20have%20all%20sub-properties%20re-propagated%20in%20a%20subsequent%20turn.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20temp%20cache%20is%20not%20necessarily%20sufficient%20to%20prevent%20invalid%20array%0A%20%20%20%20%20%20%20*%20paths%2C%20since%20a%20splice%20can%20happen%20during%20the%20same%20turn%20(with%20pathological%0A%20%20%20%20%20%20%20*%20user%20code)%3B%20we%20could%20introduce%20a%20%22fixup%22%20for%20temporarily%20cached%20array%0A%20%20%20%20%20%20%20*%20paths%20if%20needed%3A%20https%3A%2F%2Fgithub.com%2FPolymer%2Fpolymer%2Fissues%2F4227%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20shouldNotify%20True%20if%20property%20should%20fire%20notification%0A%20%20%20%20%20%20%20*%20%20%20event%20(applies%20only%20for%20%60notify%3A%20true%60%20properties)%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20Returns%20true%20if%20the%20property%20changed%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setPendingProperty'%2Cvalue%3Afunction%20_setPendingProperty(property%2Cvalue%2CshouldNotify)%7Bvar%20isPath%3Dthis.__dataHasPaths%26%26Polymer.Path.isPath(property)%3Bvar%20prevProps%3DisPath%3Fthis.__dataTemp%3Athis.__data%3Bif(this._shouldPropertyChange(property%2Cvalue%2CprevProps%5Bproperty%5D))%7Bif(!this.__dataPending)%7Bthis.__dataPending%3D%7B%7D%3Bthis.__dataOld%3D%7B%7D%3B%7D%2F%2F%20Ensure%20old%20is%20captured%20from%20the%20last%20turn%0Aif(!(property%20in%20this.__dataOld))%7Bthis.__dataOld%5Bproperty%5D%3Dthis.__data%5Bproperty%5D%3B%7D%2F%2F%20Paths%20are%20stored%20in%20temporary%20cache%20(cleared%20at%20end%20of%20turn)%2C%0A%2F%2F%20which%20is%20used%20for%20dirty-checking%2C%20all%20others%20stored%20in%20__data%0Aif(isPath)%7Bthis.__dataTemp%5Bproperty%5D%3Dvalue%3B%7Delse%7Bthis.__data%5Bproperty%5D%3Dvalue%3B%7D%2F%2F%20All%20changes%20go%20into%20pending%20property%20bag%2C%20passed%20to%20_propertiesChanged%0Athis.__dataPending%5Bproperty%5D%3Dvalue%3B%2F%2F%20Track%20properties%20that%20should%20notify%20separately%0Aif(isPath%7C%7Cthis%5BTYPES.NOTIFY%5D%26%26this%5BTYPES.NOTIFY%5D%5Bproperty%5D)%7Bthis.__dataToNotify%3Dthis.__dataToNotify%7C%7C%7B%7D%3Bthis.__dataToNotify%5Bproperty%5D%3DshouldNotify%3B%7Dreturn%20true%3B%7Dreturn%20false%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20base%20implementation%20to%20ensure%20all%20accessors%20set%20%60shouldNotify%60%0A%20%20%20%20%20%20%20*%20to%20true%2C%20for%20per-property%20notification%20tracking.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20the%20property%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_setProperty'%2Cvalue%3Afunction%20_setProperty(property%2Cvalue)%7Bif(this._setPendingProperty(property%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessor%60's%20default%20async%20queuing%20of%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%3A%20if%20%60__dataReady%60%20is%20false%20(has%20not%20yet%20been%0A%20%20%20%20%20%20%20*%20manually%20flushed)%2C%20the%20function%20no-ops%3B%20otherwise%20flushes%0A%20%20%20%20%20%20%20*%20%60_propertiesChanged%60%20synchronously.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_invalidateProperties'%2Cvalue%3Afunction%20_invalidateProperties()%7Bif(this.__dataReady)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Enqueues%20the%20given%20client%20on%20a%20list%20of%20pending%20clients%2C%20whose%0A%20%20%20%20%20%20%20*%20pending%20property%20changes%20can%20later%20be%20flushed%20via%20a%20call%20to%0A%20%20%20%20%20%20%20*%20%60_flushClients%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20client%20PropertyEffects%20client%20to%20enqueue%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_enqueueClient'%2Cvalue%3Afunction%20_enqueueClient(client)%7Bthis.__dataPendingClients%3Dthis.__dataPendingClients%7C%7C%5B%5D%3Bif(client!%3D%3Dthis)%7Bthis.__dataPendingClients.push(client)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20superclass%20implementation.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushProperties'%2Cvalue%3Afunction%20_flushProperties()%7Bthis.__dataCounter%2B%2B%3B_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_flushProperties'%2Cthis).call(this)%3Bthis.__dataCounter--%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Flushes%20any%20clients%20previously%20enqueued%20via%20%60_enqueueClient%60%2C%20causing%0A%20%20%20%20%20%20%20*%20their%20%60_flushProperties%60%20method%20to%20run.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_flushClients'%2Cvalue%3Afunction%20_flushClients()%7Bif(!this.__dataClientsReady)%7Bthis.__dataClientsReady%3Dtrue%3Bthis._readyClients()%3B%2F%2F%20Override%20point%20where%20accessors%20are%20turned%20on%3B%20importantly%2C%0A%2F%2F%20this%20is%20after%20clients%20have%20fully%20readied%2C%20providing%20a%20guarantee%0A%2F%2F%20that%20any%20property%20effects%20occur%20only%20after%20all%20clients%20are%20ready.%0Athis.__dataReady%3Dtrue%3B%7Delse%7Bthis.__enableOrFlushClients()%3B%7D%7D%2F%2F%20NOTE%3A%20We%20ensure%20clients%20either%20enable%20or%20flush%20as%20appropriate.%20This%0A%2F%2F%20handles%20two%20corner%20cases%3A%0A%2F%2F%20(1)%20clients%20flush%20properly%20when%20connected%2Fenabled%20before%20the%20host%0A%2F%2F%20enables%3B%20e.g.%0A%2F%2F%20%20%20(a)%20Templatize%20stamps%20with%20no%20properties%20and%20does%20not%20flush%20and%0A%2F%2F%20%20%20(b)%20the%20instance%20is%20inserted%20into%20dom%20and%0A%2F%2F%20%20%20(c)%20then%20the%20instance%20flushes.%0A%2F%2F%20(2)%20clients%20enable%20properly%20when%20not%20connected%2Fenabled%20when%20the%20host%0A%2F%2F%20flushes%3B%20e.g.%0A%2F%2F%20%20%20(a)%20a%20template%20is%20runtime%20stamped%20and%20not%20yet%20connected%2Fenabled%0A%2F%2F%20%20%20(b)%20a%20host%20sets%20a%20property%2C%20causing%20stamped%20dom%20to%20flush%0A%2F%2F%20%20%20(c)%20the%20stamped%20dom%20enables.%0A%7D%2C%7Bkey%3A'__enableOrFlushClients'%2Cvalue%3Afunction%20__enableOrFlushClients()%7Bvar%20clients%3Dthis.__dataPendingClients%3Bif(clients)%7Bthis.__dataPendingClients%3Dnull%3Bfor(var%20i%3D0%3Bi%3Cclients.length%3Bi%2B%2B)%7Bvar%20client%3Dclients%5Bi%5D%3Bif(!client.__dataEnabled)%7Bclient._enableProperties()%3B%7Delse%20if(client.__dataPending)%7Bclient._flushProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Perform%20any%20initial%20setup%20on%20client%20dom.%20Called%20before%20the%20first%0A%20%20%20%20%20%20%20*%20%60_flushProperties%60%20call%20on%20client%20dom%20and%20before%20any%20element%0A%20%20%20%20%20%20%20*%20observers%20are%20called.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_readyClients'%2Cvalue%3Afunction%20_readyClients()%7Bthis.__enableOrFlushClients()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Sets%20a%20bag%20of%20property%20changes%20to%20this%20instance%2C%20and%0A%20%20%20%20%20%20%20*%20synchronously%20processes%20all%20effects%20of%20the%20properties%20as%20a%20batch.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Property%20names%20must%20be%20simple%20properties%2C%20not%20paths.%20%20Batched%0A%20%20%20%20%20%20%20*%20path%20propagation%20is%20not%20supported.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20one%20or%20more%20key-value%20pairs%20whose%20key%20is%0A%20%20%20%20%20%20%20*%20%20%20a%20property%20and%20value%20is%20the%20new%20value%20to%20set%20for%20that%20property.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20setReadOnly%20When%20true%2C%20any%20private%20values%20set%20in%0A%20%20%20%20%20%20%20*%20%20%20%60props%60%20will%20be%20set.%20By%20default%2C%20%60setProperties%60%20will%20not%20set%0A%20%20%20%20%20%20%20*%20%20%20%60readOnly%3A%20true%60%20root%20properties.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'setProperties'%2Cvalue%3Afunction%20setProperties(props%2CsetReadOnly)%7Bfor(var%20path%20in%20props)%7Bif(setReadOnly%7C%7C!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5Bpath%5D)%7B%2F%2FTODO(kschaaf)%3A%20explicitly%20disallow%20paths%20in%20setProperty%3F%0A%2F%2F%20wildcard%20observers%20currently%20only%20pass%20the%20first%20changed%20path%0A%2F%2F%20in%20the%20%60info%60%20object%2C%20and%20you%20could%20do%20some%20odd%20things%20batching%0A%2F%2F%20paths%2C%20e.g.%20%7B'foo.bar'%3A%20%7B...%7D%2C%20'foo'%3A%20null%7D%0Athis._setPendingPropertyOrPath(path%2Cprops%5Bpath%5D%2Ctrue)%3B%7D%7Dthis._invalidateProperties()%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20%60PropertyAccessors%60%20so%20that%20property%20accessor%0A%20%20%20%20%20%20%20*%20side%20effects%20are%20not%20enabled%20until%20after%20client%20dom%20is%20fully%20ready.%0A%20%20%20%20%20%20%20*%20Also%20calls%20%60_flushClients%60%20callback%20to%20ensure%20client%20dom%20is%20enabled%0A%20%20%20%20%20%20%20*%20that%20was%20not%20enabled%20as%20a%20result%20of%20flushing%20properties.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'ready'%2Cvalue%3Afunction%20ready()%7B%2F%2F%20It%20is%20important%20that%20%60super.ready()%60%20is%20not%20called%20here%20as%20it%0A%2F%2F%20immediately%20turns%20on%20accessors.%20Instead%2C%20we%20wait%20until%20%60readyClients%60%0A%2F%2F%20to%20enable%20accessors%20to%20provide%20a%20guarantee%20that%20clients%20are%20ready%0A%2F%2F%20before%20processing%20any%20accessors%20side%20effects.%0Athis._flushProperties()%3B%2F%2F%20If%20no%20data%20was%20pending%2C%20%60_flushProperties%60%20will%20not%20%60flushClients%60%0A%2F%2F%20so%20ensure%20this%20is%20done.%0Aif(!this.__dataClientsReady)%7Bthis._flushClients()%3B%7D%2F%2F%20Before%20ready%2C%20client%20notifications%20do%20not%20trigger%20_flushProperties.%0A%2F%2F%20Therefore%20a%20flush%20is%20necessary%20here%20if%20data%20has%20been%20set.%0Aif(this.__dataPending)%7Bthis._flushProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Implements%20%60PropertyAccessors%60's%20properties%20changed%20callback.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Runs%20each%20class%20of%20effects%20for%20the%20batch%20of%20changed%20properties%20in%0A%20%20%20%20%20%20%20*%20a%20specific%20order%20(compute%2C%20propagate%2C%20reflect%2C%20observe%2C%20notify).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20currentProps%20Bag%20of%20all%20current%20accessor%20values%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20changedProps%20Bag%20of%20properties%20changed%20since%20the%20last%0A%20%20%20%20%20%20%20*%20%20%20call%20to%20%60_propertiesChanged%60%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Object%7D%20oldProps%20Bag%20of%20previous%20values%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20in%20%60changedProps%60%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propertiesChanged'%2Cvalue%3Afunction%20_propertiesChanged(currentProps%2CchangedProps%2ColdProps)%7B%2F%2F%20----------------------------%0A%2F%2F%20let%20c%20%3D%20Object.getOwnPropertyNames(changedProps%20%7C%7C%20%7B%7D)%3B%0A%2F%2F%20window.debug%20%26%26%20console.group(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20if%20(window.debug)%20%7B%20debugger%3B%20%7D%0A%2F%2F%20----------------------------%0Avar%20hasPaths%3Dthis.__dataHasPaths%3Bthis.__dataHasPaths%3Dfalse%3B%2F%2F%20Compute%20properties%0ArunComputedEffects(this%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Clear%20notify%20properties%20prior%20to%20possible%20reentry%20(propagate%2C%20observe)%2C%0A%2F%2F%20but%20after%20computing%20effects%20have%20a%20chance%20to%20add%20to%20them%0Avar%20notifyProps%3Dthis.__dataToNotify%3Bthis.__dataToNotify%3Dnull%3B%2F%2F%20Propagate%20properties%20to%20clients%0Athis._propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Flush%20clients%0Athis._flushClients()%3B%2F%2F%20Reflect%20properties%0ArunEffects(this%2Cthis%5BTYPES.REFLECT%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Observe%20properties%0ArunEffects(this%2Cthis%5BTYPES.OBSERVE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%2F%2F%20Notify%20properties%20to%20host%0Aif(notifyProps)%7BrunNotifyEffects(this%2CnotifyProps%2CchangedProps%2ColdProps%2ChasPaths)%3B%7D%2F%2F%20Clear%20temporary%20cache%20at%20end%20of%20turn%0Aif(this.__dataCounter%3D%3D1)%7Bthis.__dataTemp%3D%7B%7D%3B%7D%2F%2F%20----------------------------%0A%2F%2F%20window.debug%20%26%26%20console.groupEnd(this.localName%20%2B%20'%23'%20%2B%20this.id%20%2B%20'%3A%20'%20%2B%20c)%3B%0A%2F%2F%20----------------------------%0A%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20propagate%20any%20property%20changes%20to%20stamped%20template%20nodes%0A%20%20%20%20%20%20%20*%20managed%20by%20this%20element.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20changedProps%20Bag%20of%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_propagatePropertyChanges'%2Cvalue%3Afunction%20_propagatePropertyChanges(changedProps%2ColdProps%2ChasPaths)%7Bif(this%5BTYPES.PROPAGATE%5D)%7BrunEffects(this%2Cthis%5BTYPES.PROPAGATE%5D%2CchangedProps%2ColdProps%2ChasPaths)%3B%7Dvar%20templateInfo%3Dthis.__templateInfo%3Bwhile(templateInfo)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2CchangedProps%2ColdProps%2ChasPaths%2CtemplateInfo.nodeList)%3BtemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Aliases%20one%20data%20path%20as%20another%2C%20such%20that%20path%20notifications%20from%20one%0A%20%20%20%20%20%20%20*%20are%20routed%20to%20the%20other.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20to%20Target%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20from%20Source%20path%20to%20link.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'linkPaths'%2Cvalue%3Afunction%20linkPaths(to%2Cfrom)%7Bto%3DPolymer.Path.normalize(to)%3Bfrom%3DPolymer.Path.normalize(from)%3Bthis.__dataLinkedPaths%3Dthis.__dataLinkedPaths%7C%7C%7B%7D%3Bthis.__dataLinkedPaths%5Bto%5D%3Dfrom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20a%20data%20path%20alias%20previously%20established%20with%20%60_linkPaths%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20the%20path%20to%20unlink%20should%20be%20the%20target%20(%60to%60)%20used%20when%0A%20%20%20%20%20%20%20*%20linking%20the%20paths.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Target%20path%20to%20unlink.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unlinkPaths'%2Cvalue%3Afunction%20unlinkPaths(path)%7Bpath%3DPolymer.Path.normalize(path)%3Bif(this.__dataLinkedPaths)%7Bdelete%20this.__dataLinkedPaths%5Bpath%5D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20an%20array%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items%20%3D%20%5B%20%7Bname%3A%20'Jim'%7D%2C%20%7Bname%3A%20'Todd'%7D%2C%20%7Bname%3A%20'Bill'%7D%20%5D%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20...%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.splice(1%2C%201%2C%20%7Bname%3A%20'Sam'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.items.push(%7Bname%3A%20'Bob'%7D)%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifySplices('items'%2C%20%5B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%201%2C%20removed%3A%20%5B%7Bname%3A%20'Todd'%7D%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%20%7D%2C%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7B%20index%3A%203%2C%20removed%3A%20%5B%5D%2C%20addedCount%3A%201%2C%20object%3A%20this.items%2C%20type%3A%20'splice'%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%5D)%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7BArray%7D%20splices%20Array%20of%20splice%20records%20indicating%20ordered%0A%20%20%20%20%20%20%20*%20%20%20changes%20that%20occurred%20to%20the%20array.%20Each%20record%20should%20have%20the%0A%20%20%20%20%20%20%20*%20%20%20following%20fields%3A%0A%20%20%20%20%20%20%20*%20%20%20%20*%20index%3A%20index%20at%20which%20the%20change%20occurred%0A%20%20%20%20%20%20%20*%20%20%20%20*%20removed%3A%20array%20of%20items%20that%20were%20removed%20from%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20addedCount%3A%20number%20of%20new%20items%20added%20at%20this%20index%0A%20%20%20%20%20%20%20*%20%20%20%20*%20object%3A%20a%20reference%20to%20the%20array%20in%20question%0A%20%20%20%20%20%20%20*%20%20%20%20*%20type%3A%20the%20string%20literal%20'splice'%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20Note%20that%20splice%20records%20_must_%20be%20normalized%20such%20that%20they%20are%0A%20%20%20%20%20%20%20*%20%20%20reported%20in%20index%20order%20(raw%20results%20from%20%60Object.observe%60%20are%20not%0A%20%20%20%20%20%20%20*%20%20%20ordered%20and%20must%20be%20normalized%2Fmerged%20before%20notifying).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifySplices'%2Cvalue%3Afunction%20notifySplices(path%2Csplices)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B_notifySplices(this%2Carray%2Cinfo.path%2Csplices)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20reading%20a%20value%20from%20a%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20is%20undefined%2C%20this%20method%20returns%0A%20%20%20%20%20%20%20*%20%60undefined%60%20(this%20method%20does%20not%20throw%20when%20dereferencing%20undefined%0A%20%20%20%20%20%20%20*%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20read.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60foo.bar.baz%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60users.12.name%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20at%20the%20path%2C%20or%20%60undefined%60%20if%20any%20part%20of%20the%20path%0A%20%20%20%20%20%20%20*%20%20%20is%20undefined.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'get'%2Cvalue%3Afunction%20get(path%2Croot)%7Breturn%20Polymer.Path.get(root%7C%7Cthis%2Cpath)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Convenience%20method%20for%20setting%20a%20value%20to%20a%20path%20and%20notifying%20any%0A%20%20%20%20%20%20%20*%20elements%20bound%20to%20the%20same%20path.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20any%20part%20in%20the%20path%20except%20for%20the%20last%20is%20undefined%2C%0A%20%20%20%20%20%20%20*%20this%20method%20does%20nothing%20(this%20method%20does%20not%20throw%20when%0A%20%20%20%20%20%20%20*%20dereferencing%20undefined%20paths).%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B(string%7C!Array%3C(string%7Cnumber)%3E)%7D%20path%20Path%20to%20the%20value%0A%20%20%20%20%20%20%20*%20%20%20to%20write.%20%20The%20path%20may%20be%20specified%20as%20a%20string%20(e.g.%20%60'foo.bar.baz'%60)%0A%20%20%20%20%20%20%20*%20%20%20or%20an%20array%20of%20path%20parts%20(e.g.%20%60%5B'foo.bar'%2C%20'baz'%5D%60).%20%20Note%20that%0A%20%20%20%20%20%20%20*%20%20%20bracketed%20expressions%20are%20not%20supported%3B%20string-based%20path%20parts%0A%20%20%20%20%20%20%20*%20%20%20*must*%20be%20separated%20by%20dots.%20%20Note%20that%20when%20dereferencing%20array%0A%20%20%20%20%20%20%20*%20%20%20indices%2C%20the%20index%20may%20be%20used%20as%20a%20dotted%20part%20directly%0A%20%20%20%20%20%20%20*%20%20%20(e.g.%20%60'users.12.name'%60%20or%20%60%5B'users'%2C%2012%2C%20'name'%5D%60).%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%7D%20value%20Value%20to%20set%20at%20the%20specified%20path.%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20root%20Root%20object%20from%20which%20the%20path%20is%20evaluated.%0A%20%20%20%20%20%20%20*%20%20%20When%20specified%2C%20no%20notification%20will%20occur.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'set'%2Cvalue%3Afunction%20set(path%2Cvalue%2Croot)%7Bif(root)%7BPolymer.Path.set(root%2Cpath%2Cvalue)%3B%7Delse%7Bif(!this%5BTYPES.READ_ONLY%5D%7C%7C!this%5BTYPES.READ_ONLY%5D%5B%2F**%20%40type%20%7Bstring%7D%20*%2Fpath%5D)%7Bif(this._setPendingPropertyOrPath(path%2Cvalue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20end%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20push%20onto%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'push'%2Cvalue%3Afunction%20push(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20len%3Darray.length%3Bfor(var%20_len%3Darguments.length%2Citems%3DArray(_len%3E1%3F_len-1%3A0)%2C_key%3D1%3B_key%3C_len%3B_key%2B%2B)%7Bitems%5B_key-1%5D%3Darguments%5B_key%5D%3B%7Dvar%20ret%3Darray.push.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Clen%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20end%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'pop'%2Cvalue%3Afunction%20pop(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.pop()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2Carray.length%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Starting%20from%20the%20start%20index%20specified%2C%20removes%200%20or%20more%20items%0A%20%20%20%20%20%20%20*%20from%20the%20array%20and%20inserts%200%20or%20more%20new%20items%20in%20their%20place.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.splice%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20start%20Index%20from%20which%20to%20start%20removing%2Finserting.%0A%20%20%20%20%20%20%20*%20%40param%20%7Bnumber%7D%20deleteCount%20Number%20of%20items%20to%20remove.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20into%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%7D%20Array%20of%20removed%20items.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'splice'%2Cvalue%3Afunction%20splice(path%2Cstart%2CdeleteCount)%7Bfor(var%20_len2%3Darguments.length%2Citems%3DArray(_len2%3E3%3F_len2-3%3A0)%2C_key2%3D3%3B_key2%3C_len2%3B_key2%2B%2B)%7Bitems%5B_key2-3%5D%3Darguments%5B_key2%5D%3B%7Dvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3B%2F%2F%20Normalize%20fancy%20native%20splice%20handling%20of%20crazy%20start%20values%0Aif(start%3C0)%7Bstart%3Darray.length-Math.floor(-start)%3B%7Delse%20if(start)%7Bstart%3DMath.floor(start)%3B%7D%2F%2F%20array.splice%20does%20different%20things%20based%20on%20the%20number%20of%20arguments%0A%2F%2F%20you%20pass%20in.%20Therefore%2C%20array.splice(0)%20and%20array.splice(0%2C%20undefined)%0A%2F%2F%20do%20different%20things.%20In%20the%20former%2C%20the%20whole%20array%20is%20cleared.%20In%20the%0A%2F%2F%20latter%2C%20no%20items%20are%20removed.%0A%2F%2F%20This%20means%20that%20we%20need%20to%20detect%20whether%201.%20one%20of%20the%20arguments%0A%2F%2F%20is%20actually%20passed%20in%20and%20then%202.%20determine%20how%20many%20arguments%0A%2F%2F%20we%20should%20pass%20on%20to%20the%20native%20array.splice%0A%2F%2F%0Avar%20ret%3Dvoid%200%3B%2F%2F%20Omit%20any%20additional%20arguments%20if%20they%20were%20not%20passed%20in%0Aif(arguments.length%3D%3D%3D2)%7Bret%3Darray.splice(start)%3B%2F%2F%20Either%20start%20was%20undefined%20and%20the%20others%20were%20defined%2C%20but%20in%20this%0A%2F%2F%20case%20we%20can%20safely%20pass%20on%20all%20arguments%0A%2F%2F%0A%2F%2F%20Note%3A%20this%20includes%20the%20case%20where%20none%20of%20the%20arguments%20were%20passed%20in%2C%0A%2F%2F%20e.g.%20this.splice('array').%20However%2C%20if%20both%20start%20and%20deleteCount%0A%2F%2F%20are%20undefined%2C%20array.splice%20will%20not%20modify%20the%20array%20(as%20expected)%0A%7Delse%7Bret%3Darray.splice.apply(array%2C%5Bstart%2CdeleteCount%5D.concat(items))%3B%7D%2F%2F%20At%20the%20end%2C%20check%20whether%20any%20items%20were%20passed%20in%20(e.g.%20insertions)%0A%2F%2F%20or%20if%20the%20return%20array%20contains%20items%20(e.g.%20deletions).%0A%2F%2F%20Only%20notify%20if%20items%20were%20added%20or%20deleted.%0Aif(items.length%7C%7Cret.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2Cstart%2Citems.length%2Cret)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20an%20item%20from%20the%20beginning%20of%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.pop%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Item%20that%20was%20removed.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'shift'%2Cvalue%3Afunction%20shift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bvar%20hadLength%3DBoolean(array.length)%3Bvar%20ret%3Darray.shift()%3Bif(hadLength)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2C0%2C%5Bret%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20items%20onto%20the%20beginning%20of%20the%20array%20at%20the%20path%20specified.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20arguments%20after%20%60path%60%20and%20return%20value%20match%20that%20of%0A%20%20%20%20%20%20%20*%20%60Array.prototype.push%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20notifies%20other%20paths%20to%20the%20same%20array%20that%20a%0A%20%20%20%20%20%20%20*%20splice%20occurred%20to%20the%20array.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%20%7C%20!Array%3Cstring%7Cnumber%3E%7D%20path%20Path%20to%20array.%0A%20%20%20%20%20%20%20*%20%40param%20%7B...*%7D%20items%20Items%20to%20insert%20info%20array%0A%20%20%20%20%20%20%20*%20%40return%20%7Bnumber%7D%20New%20length%20of%20the%20array.%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'unshift'%2Cvalue%3Afunction%20unshift(path)%7Bvar%20info%3D%7Bpath%3A''%7D%3Bvar%20array%3D%2F**%20%40type%20%7BArray%7D%20*%2FPolymer.Path.get(this%2Cpath%2Cinfo)%3Bfor(var%20_len3%3Darguments.length%2Citems%3DArray(_len3%3E1%3F_len3-1%3A0)%2C_key3%3D1%3B_key3%3C_len3%3B_key3%2B%2B)%7Bitems%5B_key3-1%5D%3Darguments%5B_key3%5D%3B%7Dvar%20ret%3Darray.unshift.apply(array%2Citems)%3Bif(items.length)%7BnotifySplice(this%2Carray%2Cinfo.path%2C0%2Citems.length%2C%5B%5D)%3B%7Dreturn%20ret%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Notify%20that%20a%20path%20has%20changed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Example%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.item.user.name%20%3D%20'Bob'%3B%0A%20%20%20%20%20%20%20*%20%20%20%20%20this.notifyPath('item.user.name')%3B%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Path%20that%20should%20be%20notified.%0A%20%20%20%20%20%20%20*%20%40param%20%7B*%3D%7D%20value%20Value%20at%20the%20path%20(optional).%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40public%0A%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'notifyPath'%2Cvalue%3Afunction%20notifyPath(path%2Cvalue)%7B%2F**%20%40type%20%7Bstring%7D%20*%2Fvar%20propPath%3Dvoid%200%3Bif(arguments.length%3D%3D1)%7B%2F%2F%20Get%20value%20if%20not%20supplied%0Avar%20info%3D%7Bpath%3A''%7D%3Bvalue%3DPolymer.Path.get(this%2Cpath%2Cinfo)%3BpropPath%3Dinfo.path%3B%7Delse%20if(Array.isArray(path))%7B%2F%2F%20Normalize%20path%20if%20needed%0ApropPath%3DPolymer.Path.normalize(path)%3B%7Delse%7BpropPath%3D%2F**%20%40type%7Bstring%7D%20*%2Fpath%3B%7Dif(this._setPendingPropertyOrPath(propPath%2Cvalue%2Ctrue%2Ctrue))%7Bthis._invalidateProperties()%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReadOnlyProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReadOnlyProperty'%2Cvalue%3Afunction%20_createReadOnlyProperty(property%2CprotectedSetter)%7Bthis._addPropertyEffect(property%2CTYPES.READ_ONLY)%3Bif(protectedSetter)%7Bthis%5B'_set'%2Bupper(property)%5D%3D%2F**%20%40this%20%7BPropertyEffects%7D%20*%2Ffunction(value)%7Bthis._setProperty(property%2Cvalue)%3B%7D%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createPropertyObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createPropertyObserver'%2Cvalue%3Afunction%20_createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bvar%20info%3D%7Bproperty%3Aproperty%2Cmethod%3Amethod%2CdynamicFn%3ABoolean(dynamicFn)%7D%3Bthis._addPropertyEffect(property%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Aproperty%7D%7D)%3Bif(dynamicFn)%7Bthis._addPropertyEffect(%2F**%20%40type%20%7Bstring%7D%20*%2Fmethod%2CTYPES.OBSERVE%2C%7Bfn%3ArunObserverEffect%2Cinfo%3Ainfo%2Ctrigger%3A%7Bname%3Amethod%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createMethodObserver%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createMethodObserver'%2Cvalue%3Afunction%20_createMethodObserver(expression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20observer%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.OBSERVE%2CrunMethodEffect%2Cnull%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createNotifyingProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createNotifyingProperty'%2Cvalue%3Afunction%20_createNotifyingProperty(property)%7Bthis._addPropertyEffect(property%2CTYPES.NOTIFY%2C%7Bfn%3ArunNotifyEffect%2Cinfo%3A%7BeventName%3ACaseMap.camelToDashCase(property)%2B'-changed'%2Cproperty%3Aproperty%7D%7D)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createReflectedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createReflectedProperty'%2Cvalue%3Afunction%20_createReflectedProperty(property)%7Bvar%20attr%3Dthis.constructor.attributeNameForProperty(property)%3Bif(attr%5B0%5D%3D%3D%3D'-')%7Bconsole.warn('Property%20'%2Bproperty%2B'%20cannot%20be%20reflected%20to%20attribute%20'%2Battr%2B'%20because%20%22-%22%20is%20not%20a%20valid%20starting%20attribute%20name.%20Use%20a%20lowercase%20first%20letter%20for%20the%20property%20instead.')%3B%7Delse%7Bthis._addPropertyEffect(property%2CTYPES.REFLECT%2C%7Bfn%3ArunReflectEffect%2Cinfo%3A%7BattrName%3Aattr%7D%7D)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60createComputedProperty%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_createComputedProperty'%2Cvalue%3Afunction%20_createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bvar%20sig%3DparseMethod(expression)%3Bif(!sig)%7Bthrow%20new%20Error(%22Malformed%20computed%20expression%20'%22%2Bexpression%2B%22'%22)%3B%7DcreateMethodEffect(this%2Csig%2CTYPES.COMPUTE%2CrunComputedEffect%2Cproperty%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Gather%20the%20argument%20values%20for%20a%20method%20specified%20in%20the%20provided%20array%0A%20%20%20%20%20%20%20*%20of%20argument%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60path%60%20and%20%60value%60%20arguments%20are%20used%20to%20fill%20in%20wildcard%20descriptor%0A%20%20%20%20%20%20%20*%20when%20the%20method%20is%20being%20called%20as%20a%20result%20of%20a%20path%20notification.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!Array%3C!MethodArg%3E%7D%20args%20Array%20of%20argument%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20name%20that%20triggered%20the%20method%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C*%3E%7D%20Array%20of%20argument%20values%0A%20%20%20%20%20%20%20*%20%40private%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_marshalArgs'%2Cvalue%3Afunction%20_marshalArgs(args%2Cpath%2Cprops)%7Bvar%20data%3Dthis.__data%3Bvar%20values%3D%5B%5D%3Bfor(var%20i%3D0%2Cl%3Dargs.length%3Bi%3Cl%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bvar%20name%3Darg.name%3Bvar%20v%3Dvoid%200%3Bif(arg.literal)%7Bv%3Darg.value%3B%7Delse%7Bif(arg.structured)%7Bv%3DPolymer.Path.get(data%2Cname)%3B%2F%2F%20when%20data%20is%20not%20stored%20e.g.%20%60splices%60%0Aif(v%3D%3D%3Dundefined)%7Bv%3Dprops%5Bname%5D%3B%7D%7Delse%7Bv%3Ddata%5Bname%5D%3B%7D%7Dif(arg.wildcard)%7B%2F%2F%20Only%20send%20the%20actual%20path%20changed%20info%20if%20the%20change%20that%0A%2F%2F%20caused%20the%20observer%20to%20run%20matched%20the%20wildcard%0Avar%20baseChanged%3Dname.indexOf(path%2B'.')%3D%3D%3D0%3Bvar%20matches%3Dpath.indexOf(name)%3D%3D%3D0%26%26!baseChanged%3Bvalues%5Bi%5D%3D%7Bpath%3Amatches%3Fpath%3Aname%2Cvalue%3Amatches%3Fprops%5Bpath%5D%3Av%2Cbase%3Av%7D%3B%7Delse%7Bvalues%5Bi%5D%3Dv%3B%7D%7Dreturn%20values%3B%7D%2F%2F%20--%20static%20class%20methods%20------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Ensures%20an%20accessor%20exists%20for%20the%20specified%20property%2C%20and%20adds%0A%20%20%20%20%20%20%20*%20to%20a%20list%20of%20%22property%20effects%22%20that%20will%20run%20when%20the%20accessor%20for%0A%20%20%20%20%20%20%20*%20the%20specified%20property%20is%20set.%20%20Effects%20are%20grouped%20by%20%22type%22%2C%20which%0A%20%20%20%20%20%20%20*%20roughly%20corresponds%20to%20a%20phase%20in%20effect%20processing.%20%20The%20effect%0A%20%20%20%20%20%20%20*%20metadata%20should%20be%20in%20the%20following%20form%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20fn%3A%20effectFunction%2C%20%2F%2F%20Reference%20to%20function%20to%20call%20to%20perform%20effect%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20info%3A%20%7B%20...%20%7D%20%20%20%20%20%20%20%2F%2F%20Effect%20metadata%20passed%20to%20function%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20trigger%3A%20%7B%20%20%20%20%20%20%20%20%20%20%2F%2F%20Optional%20triggering%20metadata%3B%20if%20not%20provided%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20name%3A%20string%20%20%20%20%20%20%2F%2F%20the%20property%20is%20treated%20as%20a%20wildcard%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20structured%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%20%20wildcard%3A%20boolean%0A%20%20%20%20%20%20%20*%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effects%20are%20called%20from%20%60_propertiesChanged%60%20in%20the%20following%20order%20by%0A%20%20%20%20%20%20%20*%20type%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%201.%20COMPUTE%0A%20%20%20%20%20%20%20*%202.%20PROPAGATE%0A%20%20%20%20%20%20%20*%203.%20REFLECT%0A%20%20%20%20%20%20%20*%204.%20OBSERVE%0A%20%20%20%20%20%20%20*%205.%20NOTIFY%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Effect%20functions%20are%20called%20with%20the%20following%20signature%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%20%20%20%20effectFunction(inst%2C%20path%2C%20props%2C%20oldProps%2C%20info%2C%20hasPaths)%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20type%20Effect%20type%2C%20from%20this.PROPERTY_EFFECT_TYPES%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_bindTemplate'%2C%2F%2F%20--%20binding%20----------------------------------------------%0A%2F**%0A%20%20%20%20%20%20%20*%20Equivalent%20to%20static%20%60bindTemplate%60%20API%20but%20can%20be%20called%20on%0A%20%20%20%20%20%20%20*%20an%20instance%20to%20add%20effects%20at%20runtime.%20%20See%20that%20method%20for%0A%20%20%20%20%20%20%20*%20full%20API%20docs.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20on%20the%20prototype%20(for%20prototypical%20template%0A%20%20%20%20%20%20%20*%20binding%2C%20to%20avoid%20creating%20accessors%20every%20instance)%20once%20per%20prototype%2C%0A%20%20%20%20%20%20%20*%20and%20will%20be%20called%20with%20%60runtimeBinding%3A%20true%60%20by%20%60_stampTemplate%60%20to%0A%20%20%20%20%20%20%20*%20create%20and%20link%20an%20instance%20of%20the%20template%20metadata%20associated%20with%20a%0A%20%20%20%20%20%20%20*%20particular%20stamping.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20instanceBinding%20When%20false%20(default)%2C%20performs%0A%20%20%20%20%20%20%20*%20%20%20%22prototypical%22%20binding%20of%20the%20template%20and%20overwrites%20any%20previously%0A%20%20%20%20%20%20%20*%20%20%20bound%20template%20for%20the%20class.%20When%20true%20(as%20passed%20from%0A%20%20%20%20%20%20%20*%20%20%20%60_stampTemplate%60)%2C%20the%20template%20info%20is%20instanced%20and%20linked%20into%0A%20%20%20%20%20%20%20*%20%20%20the%20list%20of%20bound%20templates.%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%3B%20for%20%60runtimeBinding%60%2C%0A%20%20%20%20%20%20%20*%20%20%20this%20is%20an%20instance%20of%20the%20prototypical%20template%20info%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_bindTemplate(template%2CinstanceBinding)%7Bvar%20templateInfo%3Dthis.constructor._parseTemplate(template)%3Bvar%20wasPreBound%3Dthis.__templateInfo%3D%3DtemplateInfo%3B%2F%2F%20Optimization%3A%20since%20this%20is%20called%20twice%20for%20proto-bound%20templates%2C%0A%2F%2F%20don't%20attempt%20to%20recreate%20accessors%20if%20this%20template%20was%20pre-bound%0Aif(!wasPreBound)%7Bfor(var%20prop%20in%20templateInfo.propertyEffects)%7Bthis._createPropertyAccessor(prop)%3B%7D%7Dif(instanceBinding)%7B%2F%2F%20For%20instance-time%20binding%2C%20create%20instance%20of%20template%20metadata%0A%2F%2F%20and%20link%20into%20list%20of%20templates%20if%20necessary%0AtemplateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2FObject.create(templateInfo)%3BtemplateInfo.wasPreBound%3DwasPreBound%3Bif(!wasPreBound%26%26this.__templateInfo)%7Bvar%20last%3Dthis.__templateInfoLast%7C%7Cthis.__templateInfo%3Bthis.__templateInfoLast%3Dlast.nextTemplateInfo%3DtemplateInfo%3BtemplateInfo.previousTemplateInfo%3Dlast%3Breturn%20templateInfo%3B%7D%7Dreturn%20this.__templateInfo%3DtemplateInfo%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Adds%20a%20property%20effect%20to%20the%20given%20template%20metadata%2C%20which%20is%20run%0A%20%20%20%20%20%20%20*%20at%20the%20%22propagate%22%20stage%20of%20%60_propertiesChanged%60%20when%20the%20template%0A%20%20%20%20%20%20%20*%20has%20been%20bound%20to%20the%20element%20via%20%60_bindTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20%60effect%60%20object%20should%20match%20the%20format%20in%20%60_addPropertyEffect%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Template%20metadata%20to%20add%20effect%20to%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20prop%20Property%20that%20should%20trigger%20the%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%3D%7D%20effect%20Effect%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_stampTemplate'%2C%2F**%0A%20%20%20%20%20%20%20*%20Stamps%20the%20provided%20template%20and%20performs%20instance-time%20setup%20for%0A%20%20%20%20%20%20%20*%20Polymer%20template%20features%2C%20including%20data%20bindings%2C%20declarative%20event%0A%20%20%20%20%20%20%20*%20listeners%2C%20and%20the%20%60this.%24%60%20map%20of%20%60id%60's%20to%20nodes.%20%20A%20document%20fragment%0A%20%20%20%20%20%20%20*%20is%20returned%20containing%20the%20stamped%20DOM%2C%20ready%20for%20insertion%20into%20the%0A%20%20%20%20%20%20%20*%20DOM.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20This%20method%20may%20be%20called%20more%20than%20once%3B%20however%20note%20that%20due%20to%0A%20%20%20%20%20%20%20*%20%60shadycss%60%20polyfill%20limitations%2C%20only%20styles%20from%20templates%20prepared%0A%20%20%20%20%20%20%20*%20using%20%60ShadyCSS.prepareTemplate%60%20will%20be%20correctly%20polyfilled%20(scoped%0A%20%20%20%20%20%20%20*%20to%20the%20shadow%20root%20and%20support%20CSS%20custom%20properties)%2C%20and%20note%20that%0A%20%20%20%20%20%20%20*%20%60ShadyCSS.prepareTemplate%60%20may%20only%20be%20called%20once%20per%20element.%20As%20such%2C%0A%20%20%20%20%20%20%20*%20any%20styles%20required%20by%20in%20runtime-stamped%20templates%20must%20be%20included%0A%20%20%20%20%20%20%20*%20in%20the%20main%20element%20template.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20to%20stamp%0A%20%20%20%20%20%20%20*%20%40return%20%7B!StampedTemplate%7D%20Cloned%20template%20content%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2Fvalue%3Afunction%20_stampTemplate(template)%7B%2F%2F%20Ensures%20that%20created%20dom%20is%20%60_enqueueClient%60'd%20to%20this%20element%20so%0A%2F%2F%20that%20it%20can%20be%20flushed%20on%20next%20call%20to%20%60_flushProperties%60%0AhostStack.beginHosting(this)%3Bvar%20dom%3D_get(PropertyEffects.prototype.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects.prototype)%2C'_stampTemplate'%2Cthis).call(this%2Ctemplate)%3BhostStack.endHosting(this)%3Bvar%20templateInfo%3D%2F**%20%40type%20%7B!TemplateInfo%7D%20*%2Fthis._bindTemplate(template%2Ctrue)%3B%2F%2F%20Add%20template-instance-specific%20data%20to%20instanced%20templateInfo%0AtemplateInfo.nodeList%3Ddom.nodeList%3B%2F%2F%20Capture%20child%20nodes%20to%20allow%20unstamping%20of%20non-prototypical%20templates%0Aif(!templateInfo.wasPreBound)%7Bvar%20nodes%3DtemplateInfo.childNodes%3D%5B%5D%3Bfor(var%20n%3Ddom.firstChild%3Bn%3Bn%3Dn.nextSibling)%7Bnodes.push(n)%3B%7D%7Ddom.templateInfo%3DtemplateInfo%3B%2F%2F%20Setup%20compound%20storage%2C%202-way%20listeners%2C%20and%20dataHost%20for%20bindings%0AsetupBindings(this%2CtemplateInfo)%3B%2F%2F%20Flush%20properties%20into%20template%20nodes%20if%20already%20booted%0Aif(this.__dataReady)%7BrunEffects(this%2CtemplateInfo.propertyEffects%2Cthis.__data%2Cnull%2Cfalse%2CtemplateInfo.nodeList)%3B%7Dreturn%20dom%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Removes%20and%20unbinds%20the%20nodes%20previously%20contained%20in%20the%20provided%0A%20%20%20%20%20%20%20*%20DocumentFragment%20returned%20from%20%60_stampTemplate%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!StampedTemplate%7D%20dom%20DocumentFragment%20previously%20returned%0A%20%20%20%20%20%20%20*%20%20%20from%20%60_stampTemplate%60%20associated%20with%20the%20nodes%20to%20be%20removed%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_removeBoundDom'%2Cvalue%3Afunction%20_removeBoundDom(dom)%7B%2F%2F%20Unlink%20template%20info%0Avar%20templateInfo%3Ddom.templateInfo%3Bif(templateInfo.previousTemplateInfo)%7BtemplateInfo.previousTemplateInfo.nextTemplateInfo%3DtemplateInfo.nextTemplateInfo%3B%7Dif(templateInfo.nextTemplateInfo)%7BtemplateInfo.nextTemplateInfo.previousTemplateInfo%3DtemplateInfo.previousTemplateInfo%3B%7Dif(this.__templateInfoLast%3D%3DtemplateInfo)%7Bthis.__templateInfoLast%3DtemplateInfo.previousTemplateInfo%3B%7DtemplateInfo.previousTemplateInfo%3DtemplateInfo.nextTemplateInfo%3Dnull%3B%2F%2F%20Remove%20stamped%20nodes%0Avar%20nodes%3DtemplateInfo.childNodes%3Bfor(var%20i%3D0%3Bi%3Cnodes.length%3Bi%2B%2B)%7Bvar%20node%3Dnodes%5Bi%5D%3Bnode.parentNode.removeChild(node)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20%60TextNode%60's'%20%60textContent%60.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'PROPERTY_EFFECT_TYPES'%2Cget%3Afunction%20get()%7Breturn%20TYPES%3B%7D%7D%5D%2C%5B%7Bkey%3A'addPropertyEffect'%2Cvalue%3Afunction%20addPropertyEffect(property%2Ctype%2Ceffect)%7Bthis.prototype._addPropertyEffect(property%2Ctype%2Ceffect)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20single-property%20observer%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7Cfunction(*%2C*)%7D%20method%20Function%20or%20name%20of%20observer%20method%20to%20call%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20dynamicFn%20Whether%20the%20method%20name%20should%20be%20included%20as%0A%20%20%20%20%20%20%20*%20%20%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createPropertyObserver'%2Cvalue%3Afunction%20createPropertyObserver(property%2Cmethod%2CdynamicFn)%7Bthis.prototype._createPropertyObserver(property%2Cmethod%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20multi-property%20%22method%20observer%22%20based%20on%20the%20provided%0A%20%20%20%20%20%20%20*%20expression%2C%20which%20should%20be%20a%20string%20in%20the%20form%20of%20a%20normal%20JavaScript%0A%20%20%20%20%20%20%20*%20function%20signature%3A%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60.%20%20Each%20argument%0A%20%20%20%20%20%20%20*%20should%20correspond%20to%20a%20property%20or%20path%20in%20the%20context%20of%20this%0A%20%20%20%20%20%20%20*%20prototype%20(or%20instance)%2C%20or%20may%20be%20a%20literal%20string%20or%20number.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%20%20whether%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createMethodObserver'%2Cvalue%3Afunction%20createMethodObserver(expression%2CdynamicFn)%7Bthis.prototype._createMethodObserver(expression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20dispatch%20%60%3Cproperty%3E-changed%60%0A%20%20%20%20%20%20%20*%20events%20to%20notify%20of%20changes%20to%20the%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createNotifyingProperty'%2Cvalue%3Afunction%20createNotifyingProperty(property)%7Bthis.prototype._createNotifyingProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20read-only%20accessor%20for%20the%20given%20property.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20To%20set%20the%20property%2C%20use%20the%20protected%20%60_setProperty%60%20API.%0A%20%20%20%20%20%20%20*%20To%20create%20a%20custom%20protected%20setter%20(e.g.%20%60_setMyProp()%60%20for%0A%20%20%20%20%20%20%20*%20property%20%60myProp%60)%2C%20pass%20%60true%60%20for%20%60protectedSetter%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Note%2C%20if%20the%20property%20will%20have%20other%20property%20effects%2C%20this%20method%0A%20%20%20%20%20%20%20*%20should%20be%20called%20first%2C%20before%20adding%20other%20effects.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%3D%7D%20protectedSetter%20Creates%20a%20custom%20protected%20setter%0A%20%20%20%20%20%20%20*%20%20%20when%20%60true%60.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReadOnlyProperty'%2Cvalue%3Afunction%20createReadOnlyProperty(property%2CprotectedSetter)%7Bthis.prototype._createReadOnlyProperty(property%2CprotectedSetter)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Causes%20the%20setter%20for%20the%20given%20property%20to%20reflect%20the%20property%20value%0A%20%20%20%20%20%20%20*%20to%20a%20(dash-cased)%20attribute%20of%20the%20same%20name.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Property%20name%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createReflectedProperty'%2Cvalue%3Afunction%20createReflectedProperty(property)%7Bthis.prototype._createReflectedProperty(property)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Creates%20a%20computed%20property%20whose%20value%20is%20set%20to%20the%20result%20of%20the%0A%20%20%20%20%20%20%20*%20method%20described%20by%20the%20given%20%60expression%60%20each%20time%20one%20or%20more%0A%20%20%20%20%20%20%20*%20arguments%20to%20the%20method%20changes.%20%20The%20expression%20should%20be%20a%20string%0A%20%20%20%20%20%20%20*%20in%20the%20form%20of%20a%20normal%20JavaScript%20function%20signature%3A%0A%20%20%20%20%20%20%20*%20%60'methodName(arg1%2C%20%5B...%2C%20argn%5D)'%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20property%20Name%20of%20computed%20property%20to%20set%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20expression%20Method%20expression%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7CObject%3D%7D%20dynamicFn%20Boolean%20or%20object%20map%20indicating%20whether%0A%20%20%20%20%20%20%20*%20%20%20method%20names%20should%20be%20included%20as%20a%20dependency%20to%20the%20effect.%0A%20%20%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'createComputedProperty'%2Cvalue%3Afunction%20createComputedProperty(property%2Cexpression%2CdynamicFn)%7Bthis.prototype._createComputedProperty(property%2Cexpression%2CdynamicFn)%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Parses%20the%20provided%20template%20to%20ensure%20binding%20effects%20are%20created%0A%20%20%20%20%20%20%20*%20for%20them%2C%20and%20then%20ensures%20property%20accessors%20are%20created%20for%20any%0A%20%20%20%20%20%20%20*%20dependent%20properties%20in%20the%20template.%20%20Binding%20effects%20for%20bound%0A%20%20%20%20%20%20%20*%20templates%20are%20stored%20in%20a%20linked%20list%20on%20the%20instance%20so%20that%0A%20%20%20%20%20%20%20*%20templates%20can%20be%20efficiently%20stamped%20and%20unstamped.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7B!HTMLTemplateElement%7D%20template%20Template%20containing%20binding%0A%20%20%20%20%20%20%20*%20%20%20bindings%0A%20%20%20%20%20%20%20*%20%40return%20%7B!TemplateInfo%7D%20Template%20metadata%20object%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'bindTemplate'%2Cvalue%3Afunction%20bindTemplate(template)%7Breturn%20this.prototype._bindTemplate(template)%3B%7D%7D%2C%7Bkey%3A'_addTemplatePropertyEffect'%2Cvalue%3Afunction%20_addTemplatePropertyEffect(templateInfo%2Cprop%2Ceffect)%7Bvar%20hostProps%3DtemplateInfo.hostProps%3DtemplateInfo.hostProps%7C%7C%7B%7D%3BhostProps%5Bprop%5D%3Dtrue%3Bvar%20effects%3DtemplateInfo.propertyEffects%3DtemplateInfo.propertyEffects%7C%7C%7B%7D%3Bvar%20propEffects%3Deffects%5Bprop%5D%3Deffects%5Bprop%5D%7C%7C%5B%5D%3BpropEffects.push(effect)%3B%7D%7D%2C%7Bkey%3A'_parseTemplateNode'%2Cvalue%3Afunction%20_parseTemplateNode(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNode'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3Bif(node.nodeType%3D%3D%3DNode.TEXT_NODE)%7Bvar%20parts%3Dthis._parseBindings(node.textContent%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Initialize%20the%20textContent%20with%20any%20literal%20parts%0A%2F%2F%20NOTE%3A%20default%20to%20a%20space%20here%20so%20the%20textNode%20remains%3B%20some%20browsers%0A%2F%2F%20(IE)%20omit%20an%20empty%20textNode%20following%20cloneNode%2FimportNode.%0Anode.textContent%3DliteralFromParts(parts)%7C%7C'%20'%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'text'%2C'textContent'%2Cparts)%3Bnoted%3Dtrue%3B%7D%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20parsing%20bindings%20from%20attributes.%20%20A%20%60bindings%60%0A%20%20%20%20%20%20%20*%20array%20is%20added%20to%20%60nodeInfo%60%20and%20populated%20with%20binding%20metadata%0A%20%20%20%20%20%20%20*%20with%20information%20capturing%20the%20binding%20target%2C%20and%20a%20%60parts%60%20array%0A%20%20%20%20%20%20%20*%20with%20one%20or%20more%20metadata%20objects%20capturing%20the%20source(s)%20of%20the%0A%20%20%20%20%20%20%20*%20binding.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BElement%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20name%20Attribute%20name%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20value%20Attribute%20value%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNodeAttribute'%2Cvalue%3Afunction%20_parseTemplateNodeAttribute(node%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%7Bvar%20parts%3Dthis._parseBindings(value%2CtemplateInfo)%3Bif(parts)%7B%2F%2F%20Attribute%20or%20property%0Avar%20origName%3Dname%3Bvar%20kind%3D'property'%3B%2F%2F%20The%20only%20way%20we%20see%20a%20capital%20letter%20here%20is%20if%20the%20attr%20has%0A%2F%2F%20a%20capital%20letter%20in%20it%20per%20spec.%20In%20this%20case%2C%20to%20make%20sure%0A%2F%2F%20this%20binding%20works%2C%20we%20go%20ahead%20and%20make%20the%20binding%20to%20the%20attribute.%0Aif(capitalAttributeRegex.test(name))%7Bkind%3D'attribute'%3B%7Delse%20if(name%5Bname.length-1%5D%3D%3D'%24')%7Bname%3Dname.slice(0%2C-1)%3Bkind%3D'attribute'%3B%7D%2F%2F%20Initialize%20attribute%20bindings%20with%20any%20literal%20parts%0Avar%20literal%3DliteralFromParts(parts)%3Bif(literal%26%26kind%3D%3D'attribute')%7B%2F%2F%20Ensure%20a%20ShadyCSS%20template%20scoped%20style%20is%20not%20removed%0A%2F%2F%20when%20a%20class%24%20binding's%20initial%20literal%20value%20is%20set.%0Aif(name%3D%3D'class'%26%26node.hasAttribute('class'))%7Bliteral%2B%3D'%20'%2Bnode.getAttribute(name)%3B%7Dnode.setAttribute(name%2Cliteral)%3B%7D%2F%2F%20Clear%20attribute%20before%20removing%2C%20since%20IE%20won't%20allow%20removing%0A%2F%2F%20%60value%60%20attribute%20if%20it%20previously%20had%20a%20value%20(can't%0A%2F%2F%20unconditionally%20set%20''%20before%20removing%20since%20attributes%20with%20%60%24%60%0A%2F%2F%20can't%20be%20set%20using%20setAttribute)%0Aif(node.localName%3D%3D%3D'input'%26%26origName%3D%3D%3D'value')%7Bnode.setAttribute(origName%2C'')%3B%7D%2F%2F%20Remove%20annotation%0Anode.removeAttribute(origName)%3B%2F%2F%20Case%20hackery%3A%20attributes%20are%20lower-case%2C%20but%20bind%20targets%0A%2F%2F%20(properties)%20are%20case%20sensitive.%20Gambit%20is%20to%20map%20dash-case%20to%0A%2F%2F%20camel-case%3A%20%60foo-bar%60%20becomes%20%60fooBar%60.%0A%2F%2F%20Attribute%20bindings%20are%20excepted.%0Aif(kind%3D%3D%3D'property')%7Bname%3DPolymer.CaseMap.dashToCamelCase(name)%3B%7DaddBinding(this%2CtemplateInfo%2CnodeInfo%2Ckind%2Cname%2Cparts%2Cliteral)%3Breturn%20true%3B%7Delse%7Breturn%20_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNodeAttribute'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo%2Cname%2Cvalue)%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Overrides%20default%20%60TemplateStamp%60%20implementation%20to%20add%20support%20for%0A%20%20%20%20%20%20%20*%20binding%20the%20properties%20that%20a%20nested%20template%20depends%20on%20to%20the%20template%0A%20%20%20%20%20%20%20*%20as%20%60_host_%3Cproperty%3E%60.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40override%0A%20%20%20%20%20%20%20*%20%40param%20%7BNode%7D%20node%20Node%20to%20parse%0A%20%20%20%20%20%20%20*%20%40param%20%7BTemplateInfo%7D%20templateInfo%20Template%20metadata%20for%20current%20template%0A%20%20%20%20%20%20%20*%20%40param%20%7BNodeInfo%7D%20nodeInfo%20Node%20metadata%20for%20current%20template%20node%0A%20%20%20%20%20%20%20*%20%40return%20%7Bboolean%7D%20%60true%60%20if%20the%20visited%20node%20added%20node-specific%0A%20%20%20%20%20%20%20*%20%20%20metadata%20to%20%60nodeInfo%60%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%20%40suppress%20%7BmissingProperties%7D%20Interfaces%20in%20closure%20do%20not%20inherit%20statics%2C%20but%20classes%20do%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseTemplateNestedTemplate'%2Cvalue%3Afunction%20_parseTemplateNestedTemplate(node%2CtemplateInfo%2CnodeInfo)%7Bvar%20noted%3D_get(PropertyEffects.__proto__%7C%7CObject.getPrototypeOf(PropertyEffects)%2C'_parseTemplateNestedTemplate'%2Cthis).call(this%2Cnode%2CtemplateInfo%2CnodeInfo)%3B%2F%2F%20Merge%20host%20props%20into%20outer%20template%20and%20add%20bindings%0Avar%20hostProps%3DnodeInfo.templateInfo.hostProps%3Bvar%20mode%3D'%7B'%3Bfor(var%20source%20in%20hostProps)%7Bvar%20parts%3D%5B%7Bmode%3Amode%2Csource%3Asource%2Cdependencies%3A%5Bsource%5D%7D%5D%3BaddBinding(this%2CtemplateInfo%2CnodeInfo%2C'property'%2C'_host_'%2Bsource%2Cparts)%3B%7Dreturn%20noted%3B%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20parse%20text%20in%20a%20template%20(either%20attribute%20values%20or%0A%20%20%20%20%20%20%20*%20textContent)%20into%20binding%20metadata.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Any%20overrides%20of%20this%20method%20should%20return%20an%20array%20of%20binding%20part%0A%20%20%20%20%20%20%20*%20metadata%20%20representing%20one%20or%20more%20bindings%20found%20in%20the%20provided%20text%0A%20%20%20%20%20%20%20*%20and%20any%20%22literal%22%20text%20in%20between.%20%20Any%20non-literal%20parts%20will%20be%20passed%0A%20%20%20%20%20%20%20*%20to%20%60_evaluateBinding%60%20when%20any%20dependencies%20change.%20%20The%20only%20required%0A%20%20%20%20%20%20%20*%20fields%20of%20each%20%22part%22%20in%20the%20returned%20array%20are%20as%20follows%3A%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20-%20%60dependencies%60%20-%20Array%20containing%20trigger%20metadata%20for%20each%20property%0A%20%20%20%20%20%20%20*%20%20%20that%20should%20trigger%20the%20binding%20to%20update%0A%20%20%20%20%20%20%20*%20-%20%60literal%60%20-%20String%20containing%20text%20if%20the%20part%20represents%20a%20literal%3B%0A%20%20%20%20%20%20%20*%20%20%20in%20this%20case%20no%20%60dependencies%60%20are%20needed%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Additional%20metadata%20for%20use%20by%20%60_evaluateBinding%60%20may%20be%20provided%20in%0A%20%20%20%20%20%20%20*%20each%20part%20object%20as%20needed.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20handles%20the%20following%20types%20of%20bindings%0A%20%20%20%20%20%20%20*%20(one%20or%20more%20may%20be%20intermixed%20with%20literal%20strings)%3A%0A%20%20%20%20%20%20%20*%20-%20Property%20binding%3A%20%60%5B%5Bprop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Path%20binding%3A%20%60%5B%5Bobject.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Negated%20property%20or%20path%20bindings%3A%20%60%5B%5B!prop%5D%5D%60%20or%20%60%5B%5B!object.prop%5D%5D%60%0A%20%20%20%20%20%20%20*%20-%20Two-way%20property%20or%20path%20bindings%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%7B%7Bprop%7D%7D%60%2C%20%60%7B%7Bobject.prop%7D%7D%60%2C%20%60%7B%7B!prop%7D%7D%60%20or%20%60%7B%7B!object.prop%7D%7D%60%0A%20%20%20%20%20%20%20*%20-%20Inline%20computed%20method%20(supports%20negation)%3A%0A%20%20%20%20%20%20%20*%20%20%20%60%5B%5Bcompute(a%2C%20'literal'%2C%20b)%5D%5D%60%2C%20%60%5B%5B!compute(a%2C%20'literal'%2C%20b)%5D%5D%60%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20The%20default%20implementation%20uses%20a%20regular%20expression%20for%20best%0A%20%20%20%20%20%20%20*%20performance.%20However%2C%20the%20regular%20expression%20uses%20a%20white-list%20of%0A%20%20%20%20%20%20%20*%20allowed%20characters%20in%20a%20data-binding%2C%20which%20causes%20problems%20for%0A%20%20%20%20%20%20%20*%20data-bindings%20that%20do%20use%20characters%20not%20in%20this%20white-list.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20Instead%20of%20updating%20the%20white-list%20with%20all%20allowed%20characters%2C%0A%20%20%20%20%20%20%20*%20there%20is%20a%20StrictBindingParser%20(see%20lib%2Fmixins%2Fstrict-binding-parser)%0A%20%20%20%20%20%20%20*%20that%20uses%20a%20state%20machine%20instead.%20This%20state%20machine%20is%20able%20to%20handle%0A%20%20%20%20%20%20%20*%20all%20characters.%20However%2C%20it%20is%20slightly%20less%20performant%2C%20therefore%20we%0A%20%20%20%20%20%20%20*%20extracted%20it%20into%20a%20separate%20optional%20mixin.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20text%20Text%20to%20parse%20from%20attribute%20or%20textContent%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20templateInfo%20Current%20template%20metadata%0A%20%20%20%20%20%20%20*%20%40return%20%7BArray%3C!BindingPart%3E%7D%20Array%20of%20binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_parseBindings'%2Cvalue%3Afunction%20_parseBindings(text%2CtemplateInfo)%7Bvar%20parts%3D%5B%5D%3Bvar%20lastIndex%3D0%3Bvar%20m%3Dvoid%200%3B%2F%2F%20Example%3A%20%22literal1%7B%7Bprop%7D%7Dliteral2%5B%5B!compute(foo%2Cbar)%5D%5Dfinal%22%0A%2F%2F%20Regex%20matches%3A%0A%2F%2F%20%20%20%20%20%20%20%20Iteration%201%3A%20%20Iteration%202%3A%0A%2F%2F%20m%5B1%5D%3A%20'%7B%7B'%20%20%20%20%20%20%20%20%20%20'%5B%5B'%0A%2F%2F%20m%5B2%5D%3A%20''%20%20%20%20%20%20%20%20%20%20%20%20'!'%0A%2F%2F%20m%5B3%5D%3A%20'prop'%20%20%20%20%20%20%20%20'compute(foo%2Cbar)'%0Awhile((m%3DbindingRegex.exec(text))!%3D%3Dnull)%7B%2F%2F%20Add%20literal%20part%0Aif(m.index%3ElastIndex)%7Bparts.push(%7Bliteral%3Atext.slice(lastIndex%2Cm.index)%7D)%3B%7D%2F%2F%20Add%20binding%20part%0Avar%20mode%3Dm%5B1%5D%5B0%5D%3Bvar%20negate%3DBoolean(m%5B2%5D)%3Bvar%20source%3Dm%5B3%5D.trim()%3Bvar%20customEvent%3Dfalse%2CnotifyEvent%3D''%2Ccolon%3D-1%3Bif(mode%3D%3D'%7B'%26%26(colon%3Dsource.indexOf('%3A%3A'))%3E0)%7BnotifyEvent%3Dsource.substring(colon%2B2)%3Bsource%3Dsource.substring(0%2Ccolon)%3BcustomEvent%3Dtrue%3B%7Dvar%20signature%3DparseMethod(source)%3Bvar%20dependencies%3D%5B%5D%3Bif(signature)%7B%2F%2F%20Inline%20computed%20function%0Avar%20args%3Dsignature.args%2CmethodName%3Dsignature.methodName%3Bfor(var%20i%3D0%3Bi%3Cargs.length%3Bi%2B%2B)%7Bvar%20arg%3Dargs%5Bi%5D%3Bif(!arg.literal)%7Bdependencies.push(arg)%3B%7D%7Dvar%20dynamicFns%3DtemplateInfo.dynamicFns%3Bif(dynamicFns%26%26dynamicFns%5BmethodName%5D%7C%7Csignature.static)%7Bdependencies.push(methodName)%3Bsignature.dynamicFn%3Dtrue%3B%7D%7Delse%7B%2F%2F%20Property%20or%20path%0Adependencies.push(source)%3B%7Dparts.push(%7Bsource%3Asource%2Cmode%3Amode%2Cnegate%3Anegate%2CcustomEvent%3AcustomEvent%2Csignature%3Asignature%2Cdependencies%3Adependencies%2Cevent%3AnotifyEvent%7D)%3BlastIndex%3DbindingRegex.lastIndex%3B%7D%2F%2F%20Add%20a%20final%20literal%20part%0Aif(lastIndex%26%26lastIndex%3Ctext.length)%7Bvar%20literal%3Dtext.substring(lastIndex)%3Bif(literal)%7Bparts.push(%7Bliteral%3Aliteral%7D)%3B%7D%7Dif(parts.length)%7Breturn%20parts%3B%7Delse%7Breturn%20null%3B%7D%7D%2F**%0A%20%20%20%20%20%20%20*%20Called%20to%20evaluate%20a%20previously%20parsed%20binding%20part%20based%20on%20a%20set%20of%0A%20%20%20%20%20%20%20*%20one%20or%20more%20changed%20dependencies.%0A%20%20%20%20%20%20%20*%0A%20%20%20%20%20%20%20*%20%40param%20%7Bthis%7D%20inst%20Element%20that%20should%20be%20used%20as%20scope%20for%0A%20%20%20%20%20%20%20*%20%20%20binding%20dependencies%0A%20%20%20%20%20%20%20*%20%40param%20%7BBindingPart%7D%20part%20Binding%20part%20metadata%0A%20%20%20%20%20%20%20*%20%40param%20%7Bstring%7D%20path%20Property%2Fpath%20that%20triggered%20this%20effect%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20props%20Bag%20of%20current%20property%20changes%0A%20%20%20%20%20%20%20*%20%40param%20%7BObject%7D%20oldProps%20Bag%20of%20previous%20values%20for%20changed%20properties%0A%20%20%20%20%20%20%20*%20%40param%20%7Bboolean%7D%20hasPaths%20True%20with%20%60props%60%20contains%20one%20or%20more%20paths%0A%20%20%20%20%20%20%20*%20%40return%20%7B*%7D%20Value%20the%20binding%20part%20evaluated%20to%0A%20%20%20%20%20%20%20*%20%40protected%0A%20%20%20%20%20%20%20*%2F%7D%2C%7Bkey%3A'_evaluateBinding'%2Cvalue%3Afunction%20_evaluateBinding(inst%2Cpart%2Cpath%2Cprops%2ColdProps%2ChasPaths)%7Bvar%20value%3Dvoid%200%3Bif(part.signature)%7Bvalue%3DrunMethodEffect(inst%2Cpath%2Cprops%2ColdProps%2Cpart.signature)%3B%7Delse%20if(path!%3Dpart.source)%7Bvalue%3DPolymer.Path.get(inst%2Cpart.source)%3B%7Delse%7Bif(hasPaths%26%26Polymer.Path.isPath(path))%7Bvalue%3DPolymer.Path.get(inst%2Cpath)%3B%7Delse%7Bvalue%3Dinst.__data%5Bpath%5D%3B%7D%7Dif(part.negate)%7Bvalue%3D!value%3B%7Dreturn%20value%3B%7D%7D%5D)%3Breturn%20PropertyEffects%3B%7D(propertyEffectsBase)%3B%2F%2F%20make%20a%20typing%20for%20closure%20%3AP%0APropertyEffectsType%3DPropertyEffects%3Breturn%20PropertyEffects%3B%7D)%3B%2F**%0A%20%20%20*%20Helper%20api%20for%20enqueuing%20client%20dom%20created%20by%20a%20host%20element.%0A%20%20%20*%0A%20%20%20*%20By%20default%20elements%20are%20flushed%20via%20%60_flushProperties%60%20when%0A%20%20%20*%20%60connectedCallback%60%20is%20called.%20Elements%20attach%20their%20client%20dom%20to%0A%20%20%20*%20themselves%20at%20%60ready%60%20time%20which%20results%20from%20this%20first%20flush.%0A%20%20%20*%20This%20provides%20an%20ordering%20guarantee%20that%20the%20client%20dom%20an%20element%0A%20%20%20*%20creates%20is%20flushed%20before%20the%20element%20itself%20(i.e.%20client%20%60ready%60%0A%20%20%20*%20fires%20before%20host%20%60ready%60).%0A%20%20%20*%0A%20%20%20*%20However%2C%20if%20%60_flushProperties%60%20is%20called%20*before*%20an%20element%20is%20connected%2C%0A%20%20%20*%20as%20for%20example%20%60Templatize%60%20does%2C%20this%20ordering%20guarantee%20cannot%20be%0A%20%20%20*%20satisfied%20because%20no%20elements%20are%20connected.%20(Note%3A%20Bound%20elements%20that%0A%20%20%20*%20receive%20data%20do%20become%20enqueued%20clients%20and%20are%20properly%20ordered%20but%0A%20%20%20*%20unbound%20elements%20are%20not.)%0A%20%20%20*%0A%20%20%20*%20To%20maintain%20the%20desired%20%22client%20before%20host%22%20ordering%20guarantee%20for%20this%0A%20%20%20*%20case%20we%20rely%20on%20the%20%22host%20stack.%20Client%20nodes%20registers%20themselves%20with%0A%20%20%20*%20the%20creating%20host%20element%20when%20created.%20This%20ensures%20that%20all%20client%20dom%0A%20%20%20*%20is%20readied%20in%20the%20proper%20order%2C%20maintaining%20the%20desired%20guarantee.%0A%20%20%20*%0A%20%20%20*%20%40private%0A%20%20%20*%2Fvar%20hostStack%3D%7Bstack%3A%5B%5D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20add%20to%20hostStack%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FregisterHost%3Afunction%20registerHost(inst)%7Bif(this.stack.length)%7Bvar%20host%3Dthis.stack%5Bthis.stack.length-1%5D%3Bhost._enqueueClient(inst)%3B%7D%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20begin%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FbeginHosting%3Afunction%20beginHosting(inst)%7Bthis.stack.push(inst)%3B%7D%2C%2F**%0A%20%20%20%20%20*%20%40param%20%7B*%7D%20inst%20Instance%20to%20end%20hosting%0A%20%20%20%20%20*%20%40return%20%7Bvoid%7D%0A%20%20%20%20%20*%20%40this%20%7BhostStack%7D%0A%20%20%20%20%20*%2FendHosting%3Afunction%20endHosting(inst)%7Bvar%20stackLen%3Dthis.stack.length%3Bif(stackLen%26%26this.stack%5BstackLen-1%5D%3D%3Dinst)%7Bthis.stack.pop()%3B%7D%7D%7D%3B%7D)()%3B%0A%2F%2F%23%20sourceURL%3Dhttps%3A%2F%2Fcpt-static.gannettdigital.com%2Funiversal-web-client%2Fmaster%2Flatest%2Fvendor%2Fcomponents%2Fpolymer%2Flib%2Fmixins%2Fproperty-effects.html.js%0A",
            "totalBytes": 100964,
            "wastedBytes": 40160,
            "wastedPercent": 39.77655401925439
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "totalBytes": 83689,
            "wastedBytes": 31704,
            "wastedPercent": 37.88319014455957,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "source": "…node_modules/@glidejs/glide/dist/glide.esm.js",
                  "sourceBytes": 6829,
                  "sourceWastedBytes": 2624
                },
                {
                  "source": "…elements-lit/partner/partner-gci-analytics/partner-gci-analytics.js",
                  "sourceBytes": 2523,
                  "sourceWastedBytes": 2372
                },
                {
                  "source": "…elements-lit/partner/partner-slot/partner-slot.js",
                  "sourceBytes": 5727,
                  "sourceWastedBytes": 2284
                },
                {
                  "source": "…elements-lit/promo/promo-story-thumb-small/promo-story-thumb-small.js",
                  "sourceBytes": 1785,
                  "sourceWastedBytes": 1726
                },
                {
                  "source": "…elements-lit/nav/nav-share-buttons/nav-share-buttons.js",
                  "sourceBytes": 1781,
                  "sourceWastedBytes": 1715
                }
              ]
            }
          }
        ],
        "overallSavingsMs": 150,
        "overallSavingsBytes": 147559,
        "sortedBy": [
          "wastedBytes"
        ],
        "debugData": {
          "type": "debugdata",
          "metricSavings": {
            "FCP": 150,
            "LCP": 150
          }
        }
      },
      "guidanceLevel": 1
    },
    "doctype": {
      "id": "doctype",
      "title": "Page has the HTML doctype",
      "description": "Specifying a doctype prevents the browser from switching to quirks-mode. [Learn more about the doctype declaration](https://developer.chrome.com/docs/lighthouse/best-practices/doctype/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "charset": {
      "id": "charset",
      "title": "Properly defines charset",
      "description": "A character encoding declaration is required. It can be done with a `<meta>` tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. [Learn more about declaring the character encoding](https://developer.chrome.com/docs/lighthouse/best-practices/charset/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "geolocation-on-start": {
      "id": "geolocation-on-start",
      "title": "Avoids requesting the geolocation permission on page load",
      "description": "Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. [Learn more about the geolocation permission](https://developer.chrome.com/docs/lighthouse/best-practices/geolocation-on-start/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "source",
            "valueType": "source-location",
            "label": "Source"
          }
        ],
        "items": []
      }
    },
    "inspector-issues": {
      "id": "inspector-issues",
      "title": "No issues in the `Issues` panel in Chrome Devtools",
      "description": "Issues logged to the `Issues` panel in Chrome Devtools indicate unresolved problems. They can come from network request failures, insufficient security controls, and other browser concerns. Open up the Issues panel in Chrome DevTools for more details on each issue.",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "issueType",
            "valueType": "text",
            "subItemsHeading": {
              "key": "url",
              "valueType": "url"
            },
            "label": "Issue type"
          }
        ],
        "items": []
      }
    },
    "js-libraries": {
      "id": "js-libraries",
      "title": "Detected JavaScript libraries",
      "description": "All front-end JavaScript libraries detected on the page. [Learn more about this JavaScript library detection diagnostic audit](https://developer.chrome.com/docs/lighthouse/best-practices/js-libraries/).",
      "score": 1,
      "scoreDisplayMode": "informative",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "name",
            "valueType": "text",
            "label": "Name"
          },
          {
            "key": "version",
            "valueType": "text",
            "label": "Version"
          }
        ],
        "items": [
          {
            "name": "Polymer",
            "version": "2.7.0",
            "npm": "@polymer/polymer"
          },
          {
            "name": "LitElement",
            "version": "2.5.1",
            "npm": "lit-element"
          },
          {
            "name": "lit-html",
            "version": "1.4.1",
            "npm": "lit-element"
          }
        ],
        "debugData": {
          "type": "debugdata",
          "stacks": [
            {
              "id": "polymer",
              "version": "2.7.0"
            },
            {
              "id": "litelement",
              "version": "2.5.1"
            },
            {
              "id": "lit-html",
              "version": "1.4.1"
            }
          ]
        }
      }
    },
    "notification-on-start": {
      "id": "notification-on-start",
      "title": "Avoids requesting the notification permission on page load",
      "description": "Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. [Learn more about responsibly getting permission for notifications](https://developer.chrome.com/docs/lighthouse/best-practices/notification-on-start/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "source",
            "valueType": "source-location",
            "label": "Source"
          }
        ],
        "items": []
      }
    },
    "paste-preventing-inputs": {
      "id": "paste-preventing-inputs",
      "title": "Allows users to paste into input fields",
      "description": "Preventing input pasting is a bad practice for the UX, and weakens security by blocking password managers.[Learn more about user-friendly input fields](https://developer.chrome.com/docs/lighthouse/best-practices/paste-preventing-inputs/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": "Failing Elements"
          }
        ],
        "items": []
      }
    },
    "meta-description": {
      "id": "meta-description",
      "title": "Document does not have a meta description",
      "description": "Meta descriptions may be included in search results to concisely summarize page content. [Learn more about the meta description](https://developer.chrome.com/docs/lighthouse/seo/meta-description/).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "explanation": "Description text is empty."
    },
    "http-status-code": {
      "id": "http-status-code",
      "title": "Page has successful HTTP status code",
      "description": "Pages with unsuccessful HTTP status codes may not be indexed properly. [Learn more about HTTP status codes](https://developer.chrome.com/docs/lighthouse/seo/http-status-code/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "link-text": {
      "id": "link-text",
      "title": "Links have descriptive text",
      "description": "Descriptive link text helps search engines understand your content. [Learn how to make links more accessible](https://developer.chrome.com/docs/lighthouse/seo/link-text/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "href",
            "valueType": "url",
            "label": "Link destination"
          },
          {
            "key": "text",
            "valueType": "text",
            "label": "Link Text"
          }
        ],
        "items": []
      }
    },
    "crawlable-anchors": {
      "id": "crawlable-anchors",
      "title": "Links are crawlable",
      "description": "Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. [Learn how to make links crawlable](https://support.google.com/webmasters/answer/9112205)",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": "Uncrawlable Link"
          }
        ],
        "items": []
      }
    },
    "is-crawlable": {
      "id": "is-crawlable",
      "title": "Page is blocked from indexing",
      "description": "Search engines are unable to include your pages in search results if they don't have permission to crawl them. [Learn more about crawler directives](https://developer.chrome.com/docs/lighthouse/seo/is-crawlable/).",
      "score": 0,
      "scoreDisplayMode": "binary",
      "warnings": [],
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "source",
            "valueType": "code",
            "label": "Blocking Directive Source"
          }
        ],
        "items": [
          {
            "source": "x-robots-tag: noindex, nofollow,noarchive,nocache"
          }
        ]
      }
    },
    "robots-txt": {
      "id": "robots-txt",
      "title": "robots.txt is valid",
      "description": "If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. [Learn more about robots.txt](https://developer.chrome.com/docs/lighthouse/seo/invalid-robots-txt/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "index",
            "valueType": "text",
            "label": "Line #"
          },
          {
            "key": "line",
            "valueType": "code",
            "label": "Content"
          },
          {
            "key": "message",
            "valueType": "code",
            "label": "Error"
          }
        ],
        "items": []
      }
    },
    "hreflang": {
      "id": "hreflang",
      "title": "Document has a valid `hreflang`",
      "description": "hreflang links tell search engines what version of a page they should list in search results for a given language or region. [Learn more about `hreflang`](https://developer.chrome.com/docs/lighthouse/seo/hreflang/).",
      "score": 1,
      "scoreDisplayMode": "binary",
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "source",
            "valueType": "code",
            "subItemsHeading": {
              "key": "reason",
              "valueType": "text"
            },
            "label": ""
          }
        ],
        "items": []
      }
    },
    "canonical": {
      "id": "canonical",
      "title": "Document has a valid `rel=canonical`",
      "description": "Canonical links suggest which URL to show in search results. [Learn more about canonical links](https://developer.chrome.com/docs/lighthouse/seo/canonical/).",
      "score": 1,
      "scoreDisplayMode": "binary"
    },
    "structured-data": {
      "id": "structured-data",
      "title": "Structured data is valid",
      "description": "Run the [Structured Data Testing Tool](https://developers.google.com/search/docs/appearance/structured-data/) to validate structured data. [Learn more about Structured Data](https://developer.chrome.com/docs/lighthouse/seo/structured-data/).",
      "score": null,
      "scoreDisplayMode": "manual"
    },
    "bf-cache": {
      "id": "bf-cache",
      "title": "Page didn't prevent back/forward cache restoration",
      "description": "Many navigations are performed by going back to a previous page, or forwards again. The back/forward cache (bfcache) can speed up these return navigations. [Learn more about the bfcache](https://developer.chrome.com/docs/lighthouse/performance/bf-cache/)",
      "score": 1,
      "scoreDisplayMode": "binary",
      "guidanceLevel": 4
    },
    "cache-insight": {
      "id": "cache-insight",
      "title": "Use efficient cache lifetimes",
      "description": "A long cache lifetime can speed up repeat visits to your page. [Learn more about caching](https://developer.chrome.com/docs/performance/insights/cache).",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "displayValue": "Est savings of 233 KiB",
      "metricSavings": {
        "FCP": 400,
        "LCP": 900
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "Request"
          },
          {
            "key": "cacheLifetimeMs",
            "valueType": "ms",
            "label": "Cache TTL",
            "displayUnit": "duration"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Transfer Size",
            "displayUnit": "kb",
            "granularity": 1
          }
        ],
        "items": [
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 83868,
            "wastedBytes": 67094.40000000001
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otBannerSdk.js",
            "cacheLifetimeMs": 86400000,
            "totalBytes": 131455,
            "wastedBytes": 52582
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 21268,
            "wastedBytes": 17014.4
          },
          {
            "url": "https://atoms.desmoinesregister.com/atoms-library/prod/dist/gannett-atoms-library.js",
            "cacheLifetimeMs": 900000,
            "totalBytes": 16443,
            "wastedBytes": 14695.931250000001
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Bd.woff2",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 18151,
            "wastedBytes": 14520.800000000001
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_SBd.woff2",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 18066,
            "wastedBytes": 14452.800000000001
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 17840,
            "wastedBytes": 14272
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Rg.woff2",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 17212,
            "wastedBytes": 13769.6
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/202601.2.0/otTCF.js",
            "cacheLifetimeMs": 86400000,
            "totalBytes": 18164,
            "wastedBytes": 7265.6
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 5540,
            "wastedBytes": 4432
          },
          {
            "url": "https://cdn.cookielaw.org/scripttemplates/otSDKStub.js",
            "cacheLifetimeMs": 86400000,
            "totalBytes": 9317,
            "wastedBytes": 3726.8
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/apply-shim.min.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 4465,
            "wastedBytes": 3572
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 4256,
            "wastedBytes": 3404.8
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-hi.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 3843,
            "wastedBytes": 3074.4
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/shadycss/custom-style-interface.min.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 1894,
            "wastedBytes": 1515.2
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/webcomponents-loader.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 1735,
            "wastedBytes": 1388
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 1109,
            "wastedBytes": 887.2
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/glide.core.min.css",
            "cacheLifetimeMs": 3600000,
            "totalBytes": 526,
            "wastedBytes": 420.8
          },
          {
            "url": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
            "cacheLifetimeMs": 604800000,
            "totalBytes": 354,
            "wastedBytes": 35.39999999999999
          }
        ],
        "sortedBy": [
          "wastedBytes"
        ],
        "skipSumming": [
          "cacheLifetimeMs"
        ],
        "debugData": {
          "type": "debugdata",
          "wastedBytes": 238124.13124999998
        }
      },
      "guidanceLevel": 3
    },
    "cls-culprits-insight": {
      "id": "cls-culprits-insight",
      "title": "Layout shift culprits",
      "description": "Layout shifts occur when elements move absent any user interaction. [Investigate the causes of layout shifts](https://developer.chrome.com/docs/performance/insights/cls-culprit), such as elements being added, removed, or their fonts changing as the page loads.",
      "score": 0,
      "scoreDisplayMode": "numeric",
      "metricSavings": {
        "CLS": 0
      },
      "details": {
        "type": "list",
        "items": [
          {
            "type": "table",
            "headings": [
              {
                "key": "node",
                "valueType": "node",
                "subItemsHeading": {
                  "key": "extra"
                },
                "label": "Element"
              },
              {
                "key": "score",
                "valueType": "numeric",
                "subItemsHeading": {
                  "key": "cause",
                  "valueType": "text"
                },
                "granularity": 0.001,
                "label": "Layout shift score"
              }
            ],
            "items": [
              {
                "node": {
                  "type": "text",
                  "value": "Total"
                },
                "score": 0.656139
              },
              {
                "node": {
                  "type": "node",
                  "lhId": "page-7-A",
                  "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,3,A",
                  "selector": "div.content-well > div#content > div#section-stories > a.section-helper-flex",
                  "boundingRect": {
                    "top": 377,
                    "bottom": 482,
                    "left": 34,
                    "right": 378,
                    "width": 343,
                    "height": 105
                  },
                  "snippet": "<a class=\"section-helper-flex section-helper-row ten-column spacer-small p1-container\" href=\"/story/news/local/des-moines/2026/04/22/window-washer-falls-downtown-des-m…\" data-module-name=\"promo-story-thumb-small\" data-index=\"2\" onclick=\"firePromoAnalytics(event)\">",
                  "nodeLabel": "Window washer falls three stories from downtown Des Moines building\nDes Moines "
                },
                "score": 0.336323,
                "subItems": {
                  "type": "subitems",
                  "items": [
                    {
                      "extra": {
                        "type": "node",
                        "lhId": "page-5-IMG",
                        "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,A,0,DIV,0,PICTURE,3,IMG",
                        "selector": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo",
                        "boundingRect": {
                          "top": 56,
                          "bottom": 288,
                          "left": 0,
                          "right": 412,
                          "width": 412,
                          "height": 232
                        },
                        "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/11/13/PDEM/872…\" alt=\"\" class=\"p2-photo\">",
                        "nodeLabel": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo"
                      },
                      "cause": "Unsized image element"
                    }
                  ]
                }
              },
              {
                "node": {
                  "type": "node",
                  "lhId": "page-7-A",
                  "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,3,A",
                  "selector": "div.content-well > div#content > div#section-stories > a.section-helper-flex",
                  "boundingRect": {
                    "top": 377,
                    "bottom": 482,
                    "left": 34,
                    "right": 378,
                    "width": 343,
                    "height": 105
                  },
                  "snippet": "<a class=\"section-helper-flex section-helper-row ten-column spacer-small p1-container\" href=\"/story/news/local/des-moines/2026/04/22/window-washer-falls-downtown-des-m…\" data-module-name=\"promo-story-thumb-small\" data-index=\"2\" onclick=\"firePromoAnalytics(event)\">",
                  "nodeLabel": "Window washer falls three stories from downtown Des Moines building\nDes Moines "
                },
                "score": 0.318659
              },
              {
                "node": {
                  "type": "node",
                  "lhId": "page-6-DIV",
                  "path": "1,HTML,1,BODY,2,UTIL-STICKY-MODULE,2,DIV,1,DIV,0,DIV,1,DIV",
                  "selector": "div#navWrapContainer > div#navContainer > div#navRibbon > div#itemWrapper",
                  "boundingRect": {
                    "top": 0,
                    "bottom": 55,
                    "left": 167,
                    "right": 412,
                    "width": 245,
                    "height": 55
                  },
                  "snippet": "<div id=\"itemWrapper\">",
                  "nodeLabel": "div#navWrapContainer > div#navContainer > div#navRibbon > div#itemWrapper"
                },
                "score": 0.001157,
                "subItems": {
                  "type": "subitems",
                  "items": [
                    {
                      "extra": {
                        "type": "node",
                        "lhId": "page-5-IMG",
                        "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,A,0,DIV,0,PICTURE,3,IMG",
                        "selector": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo",
                        "boundingRect": {
                          "top": 56,
                          "bottom": 288,
                          "left": 0,
                          "right": 412,
                          "width": 412,
                          "height": 232
                        },
                        "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/11/13/PDEM/872…\" alt=\"\" class=\"p2-photo\">",
                        "nodeLabel": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo"
                      },
                      "cause": "Unsized image element"
                    }
                  ]
                }
              }
            ]
          }
        ]
      },
      "guidanceLevel": 3
    },
    "document-latency-insight": {
      "id": "document-latency-insight",
      "title": "Document request latency",
      "description": "Your first network request is the most important. [Reduce its latency](https://developer.chrome.com/docs/performance/insights/document-latency) by avoiding redirects, ensuring a fast server response, and enabling text compression.",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "displayValue": "Est savings of 70 ms",
      "metricSavings": {
        "FCP": 50,
        "LCP": 50
      },
      "details": {
        "type": "checklist",
        "items": {
          "noRedirects": {
            "label": "Had redirects (2 redirects, +66 ms)",
            "value": false
          },
          "serverResponseIsFast": {
            "label": "Server responds quickly (observed 397 ms)",
            "value": true
          },
          "usesCompression": {
            "label": "Applies text compression",
            "value": true
          }
        },
        "debugData": {
          "type": "debugdata",
          "redirectDuration": 66,
          "serverResponseTime": 397,
          "uncompressedResponseBytes": 0,
          "wastedBytes": 0
        }
      },
      "guidanceLevel": 3
    },
    "dom-size-insight": {
      "id": "dom-size-insight",
      "title": "Optimize DOM size",
      "description": "A large DOM can increase the duration of style calculations and layout reflows, impacting page responsiveness. A large DOM will also increase memory usage. [Learn how to avoid an excessive DOM size](https://developer.chrome.com/docs/performance/insights/dom-size).",
      "score": 1,
      "scoreDisplayMode": "numeric",
      "numericValue": 1080,
      "numericUnit": "element",
      "metricSavings": {
        "INP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "statistic",
            "valueType": "text",
            "label": "Statistic"
          },
          {
            "key": "node",
            "valueType": "node",
            "label": "Element"
          },
          {
            "key": "value",
            "valueType": "numeric",
            "label": "Value"
          }
        ],
        "items": [
          {
            "statistic": "Total elements",
            "value": {
              "type": "numeric",
              "granularity": 1,
              "value": 1080
            }
          },
          {
            "statistic": "DOM depth",
            "node": {
              "type": "node",
              "lhId": "page-14-path",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,3,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,2,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,1,MEDIA-BADGE,a,#document-fragment,1,DIV,0,DIV,0,DIV,1,svg,1,g,0,path",
              "selector": "div.media-badge-icon > svg > g > path",
              "boundingRect": {
                "top": 0,
                "bottom": 0,
                "left": 0,
                "right": 0,
                "width": 0,
                "height": 0
              },
              "snippet": "<path d=\"M67.9,21.5h-13c0-4.1-3.2-8.2-7.1-8.2H31.4c-3.9,0-7.1,4-7.1,8.1l-13,0c-3.9,…\">",
              "nodeLabel": "div.media-badge-icon > svg > g > path"
            },
            "value": {
              "type": "numeric",
              "granularity": 1,
              "value": 19
            }
          },
          {
            "statistic": "Most children",
            "node": {
              "type": "node",
              "lhId": "page-13-DIV",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV",
              "selector": "div.primary > div.content-well > div#content > div#section-stories",
              "boundingRect": {
                "top": 56,
                "bottom": 2418,
                "left": 0,
                "right": 412,
                "width": 412,
                "height": 2362
              },
              "snippet": "<div id=\"section-stories\" class=\"row\">",
              "nodeLabel": "Iowa's speed limit would rise under a bill heading to Gov. Reynolds\nPolitics\nWi…"
            },
            "value": {
              "type": "numeric",
              "granularity": 1,
              "value": 25
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "totalElements": 1080,
          "maxChildren": 25,
          "maxDepth": 19
        }
      },
      "guidanceLevel": 3
    },
    "duplicated-javascript-insight": {
      "id": "duplicated-javascript-insight",
      "title": "Duplicated JavaScript",
      "description": "Remove large, [duplicate JavaScript modules](https://developer.chrome.com/docs/performance/insights/duplicated-javascript) from bundles to reduce unnecessary bytes consumed by network activity.",
      "score": null,
      "scoreDisplayMode": "error",
      "errorMessage": "duplication.values.flatMap is not a function or its return value is not iterable",
      "errorStack": "TypeError: duplication.values.flatMap is not a function or its return value is not iterable\n    at Module.generateInsight (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/insights/DuplicatedJavaScript.js:59:61)\n    at #computeInsightSet (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:369:33)\n    at #computeInsightsForNavigation (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:513:32)\n    at #computeInsights (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:445:47)\n    at TraceProcessor.parse (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:126:38)\n    at async TraceEngineResult.runTraceEngine (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:43:5)\n    at async TraceEngineResult.compute_ (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:256:7)",
      "guidanceLevel": 2
    },
    "font-display-insight": {
      "id": "font-display-insight",
      "title": "Font display",
      "description": "Consider setting [font-display](https://developer.chrome.com/docs/performance/insights/font-display) to swap or optional to ensure text is consistently visible. swap can be further optimized to mitigate layout shifts with [font metric overrides](https://developer.chrome.com/blog/font-fallbacks).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "metricSavings": {
        "INP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "wastedMs",
            "valueType": "ms",
            "label": "Est Savings"
          }
        ],
        "items": [],
        "skipSumming": [
          "wastedMs"
        ]
      },
      "guidanceLevel": 3
    },
    "forced-reflow-insight": {
      "id": "forced-reflow-insight",
      "title": "Forced reflow",
      "description": "A forced reflow occurs when JavaScript queries geometric properties (such as offsetWidth) after styles have been invalidated by a change to the DOM state. This can result in poor performance. Learn more about [forced reflows](https://developer.chrome.com/docs/performance/insights/forced-reflow) and possible mitigations.",
      "score": 1,
      "scoreDisplayMode": "numeric",
      "details": {
        "type": "list",
        "items": [
          {
            "type": "table",
            "headings": [
              {
                "key": "source",
                "valueType": "source-location",
                "label": "Source"
              },
              {
                "key": "reflowTime",
                "valueType": "ms",
                "granularity": 1,
                "label": "Total reflow time"
              }
            ],
            "items": []
          }
        ]
      },
      "guidanceLevel": 3
    },
    "image-delivery-insight": {
      "id": "image-delivery-insight",
      "title": "Improve image delivery",
      "description": "Reducing the download time of images can improve the perceived load time of the page and LCP. [Learn more about optimizing image size](https://developer.chrome.com/docs/performance/insights/image-delivery)",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "displayValue": "Est savings of 1,830 KiB",
      "metricSavings": {
        "FCP": 0,
        "LCP": 900
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          },
          {
            "key": "url",
            "valueType": "url",
            "label": "URL",
            "subItemsHeading": {
              "key": "reason",
              "valueType": "text"
            }
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Resource Size"
          },
          {
            "key": "wastedBytes",
            "valueType": "bytes",
            "label": "Est Savings",
            "subItemsHeading": {
              "key": "wastedBytes",
              "valueType": "bytes"
            }
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "page-0-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,20,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3006,
                "bottom": 3129,
                "left": 1632,
                "right": 1825,
                "width": 193,
                "height": 123
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/11/29/PDEM/875…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2025/11/29/PDEM/87526917007-usatsi-27702164.jpg?crop=4953,2787,x0,y184&width=384&quality=50&crop=16%3A9",
            "totalBytes": 1572370,
            "wastedBytes": 1565062,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "This image file is larger than it needs to be (4954x3156) for its displayed dimensions (338x215). Use responsive images to reduce the image download size.",
                  "wastedBytes": 1565062
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-1-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,3,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 377,
                "bottom": 482,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 105
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/897…\" class=\"p1-image\" alt=\"Window washer falls three stories from downtown Des Moines building\">",
              "nodeLabel": "Window washer falls three stories from downtown Des Moines building"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89736913007-screenshot-20260422-132701.png?crop=636,638,x0,y111&quality=50&width=270",
            "totalBytes": 147361,
            "wastedBytes": 141774,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "Using a modern image format (WebP, AVIF) or increasing the image compression could improve this image's download size.",
                  "wastedBytes": 135166
                },
                {
                  "reason": "This image file is larger than it needs to be (270x271) for its displayed dimensions (183x183). Use responsive images to reduce the image download size.",
                  "wastedBytes": 79847
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-2-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,24,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 2305,
                "bottom": 2410,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 104
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/897…\" class=\"p1-image\" alt=\"Make College Great Again? Why UI's new center is causing a stir\">",
              "nodeLabel": "Make College Great Again? Why UI's new center is causing a stir"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89734206007-caps-in-air.png?crop=2308,2308,x990,y0&quality=50&width=270",
            "totalBytes": 91048,
            "wastedBytes": 85481,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "Using a modern image format (WebP, AVIF) or increasing the image compression could improve this image's download size.",
                  "wastedBytes": 78898
                },
                {
                  "reason": "This image file is larger than it needs to be (270x270) for its displayed dimensions (183x183). Use responsive images to reduce the image download size.",
                  "wastedBytes": 49329
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-3-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,18,A,1,DIV,0,DIV,0,PICTURE,3,IMG",
              "selector": "div.section-helper-flex > div.nonflexDiv > picture.p1-image > img.p1-image",
              "boundingRect": {
                "top": 1582,
                "bottom": 1687,
                "left": 273,
                "right": 378,
                "width": 104,
                "height": 105
              },
              "snippet": "<img srcset=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/897…\" class=\"p1-image\" alt=\"Police searching for missing Ankeny teen\">",
              "nodeLabel": "Police searching for missing Ankeny teen"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/22/PDEM/89733819007-6-a-92-b-62-e-91-aa-4-e-7-c-80-c-49-cd-7-dc-94230-a.png?crop=282,283,x0,y0&quality=50&width=270",
            "totalBytes": 79792,
            "wastedBytes": 74205,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "Using a modern image format (WebP, AVIF) or increasing the image compression could improve this image's download size.",
                  "wastedBytes": 67597
                },
                {
                  "reason": "This image file is larger than it needs to be (270x271) for its displayed dimensions (183x183). Use responsive images to reduce the image download size.",
                  "wastedBytes": 43235
                }
              ]
            }
          },
          {
            "node": {
              "type": "node",
              "lhId": "page-4-IMG",
              "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,2,DIV,2,PROMO-STORY-BUCKET-SHORT,a,#document-fragment,2,DIV,1,DIV,0,CONTENT-SLIDER,6,LIT-STORY-CARD,a,#document-fragment,1,A,0,DIV,0,IMG",
              "selector": "a.container-link > div.container > img",
              "boundingRect": {
                "top": 3006,
                "bottom": 3114,
                "left": 211,
                "right": 404,
                "width": 193,
                "height": 109
              },
              "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/897…\">",
              "nodeLabel": "a.container-link > div.container > img"
            },
            "url": "https://www.gannett-cdn.com/authoring/authoring-images/2026/04/21/PDEM/89718974007-lets-make-cocktails-preview-page.jpg?crop=1329,748,x0,y96&width=384&quality=50&crop=16%3A9",
            "totalBytes": 18504,
            "wastedBytes": 7809,
            "subItems": {
              "type": "subitems",
              "items": [
                {
                  "reason": "Using a modern image format (WebP, AVIF) or increasing the image compression could improve this image's download size.",
                  "wastedBytes": 4680
                },
                {
                  "reason": "This image file is larger than it needs to be (384x216) for its displayed dimensions (338x190). Use responsive images to reduce the image download size.",
                  "wastedBytes": 4189
                }
              ]
            }
          }
        ],
        "debugData": {
          "type": "debugdata",
          "wastedBytes": 1874331
        }
      },
      "guidanceLevel": 3
    },
    "inp-breakdown-insight": {
      "id": "inp-breakdown-insight",
      "title": "INP breakdown",
      "description": "Start investigating [how to improve INP](https://developer.chrome.com/docs/performance/insights/inp-breakdown) by looking at the longest subpart.",
      "score": null,
      "scoreDisplayMode": "notApplicable",
      "guidanceLevel": 3
    },
    "lcp-breakdown-insight": {
      "id": "lcp-breakdown-insight",
      "title": "LCP breakdown",
      "description": "Each [subpart has specific improvement strategies](https://developer.chrome.com/docs/performance/insights/lcp-breakdown). Ideally, most of the LCP time should be spent on loading the resources, not within delays.",
      "score": 1,
      "scoreDisplayMode": "informative",
      "metricSavings": {
        "LCP": 0
      },
      "details": {
        "type": "list",
        "items": [
          {
            "type": "table",
            "headings": [
              {
                "key": "label",
                "valueType": "text",
                "label": "Subpart"
              },
              {
                "key": "duration",
                "valueType": "ms",
                "label": "Duration"
              }
            ],
            "items": [
              {
                "subpart": "timeToFirstByte",
                "label": "Time to first byte",
                "duration": 488.264
              },
              {
                "subpart": "resourceLoadDelay",
                "label": "Resource load delay",
                "duration": 29.025
              },
              {
                "subpart": "resourceLoadDuration",
                "label": "Resource load duration",
                "duration": 123.848
              },
              {
                "subpart": "elementRenderDelay",
                "label": "Element render delay",
                "duration": 813.431
              }
            ]
          },
          {
            "type": "node",
            "lhId": "page-5-IMG",
            "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,A,0,DIV,0,PICTURE,3,IMG",
            "selector": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo",
            "boundingRect": {
              "top": 56,
              "bottom": 288,
              "left": 0,
              "right": 412,
              "width": 412,
              "height": 232
            },
            "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/11/13/PDEM/872…\" alt=\"\" class=\"p2-photo\">",
            "nodeLabel": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo"
          }
        ]
      },
      "guidanceLevel": 3
    },
    "lcp-discovery-insight": {
      "id": "lcp-discovery-insight",
      "title": "LCP request discovery",
      "description": "[Optimize LCP](https://developer.chrome.com/docs/performance/insights/lcp-discovery) by making the LCP image discoverable from the HTML immediately, and avoiding lazy-loading",
      "score": 0,
      "scoreDisplayMode": "numeric",
      "metricSavings": {
        "LCP": 0
      },
      "details": {
        "type": "list",
        "items": [
          {
            "type": "checklist",
            "items": {
              "priorityHinted": {
                "label": "fetchpriority=high should be applied",
                "value": false
              },
              "requestDiscoverable": {
                "label": "Request is discoverable in initial document",
                "value": true
              },
              "eagerlyLoaded": {
                "label": "lazy load not applied",
                "value": true
              }
            }
          },
          {
            "type": "node",
            "lhId": "page-5-IMG",
            "path": "1,HTML,1,BODY,5,SECTION,0,DIV,0,DIV,1,DIV,0,DIV,1,DIV,0,A,0,DIV,0,PICTURE,3,IMG",
            "selector": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo",
            "boundingRect": {
              "top": 56,
              "bottom": 288,
              "left": 0,
              "right": 412,
              "width": 412,
              "height": 232
            },
            "snippet": "<img src=\"https://www.gannett-cdn.com/authoring/authoring-images/2025/11/13/PDEM/872…\" alt=\"\" class=\"p2-photo\">",
            "nodeLabel": "a.section-helper-flex > div.section-helper-column > picture.p2-photo > img.p2-photo"
          }
        ]
      },
      "guidanceLevel": 3
    },
    "legacy-javascript-insight": {
      "id": "legacy-javascript-insight",
      "title": "Legacy JavaScript",
      "description": "Polyfills and transforms enable older browsers to use new JavaScript features. However, many aren't necessary for modern browsers. Consider modifying your JavaScript build process to not transpile [Baseline](https://web.dev/articles/baseline-and-polyfills) features, unless you know you must support older browsers. [Learn why most sites can deploy ES6+ code without transpiling](https://developer.chrome.com/docs/performance/insights/legacy-javascript)",
      "score": null,
      "scoreDisplayMode": "error",
      "errorMessage": "wastedBytesByRequestId.values(...).reduce is not a function",
      "errorStack": "TypeError: wastedBytesByRequestId.values(...).reduce is not a function\n    at Module.generateInsight (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/insights/LegacyJavaScript.js:79:54)\n    at #computeInsightSet (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:369:33)\n    at #computeInsightsForNavigation (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:513:32)\n    at #computeInsights (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:445:47)\n    at TraceProcessor.parse (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:126:38)\n    at async TraceEngineResult.runTraceEngine (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:43:5)\n    at async TraceEngineResult.compute_ (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:256:7)",
      "guidanceLevel": 2
    },
    "modern-http-insight": {
      "id": "modern-http-insight",
      "title": "Modern HTTP",
      "description": "HTTP/2 and HTTP/3 offer many benefits over HTTP/1.1, such as multiplexing. [Learn more about using modern HTTP](https://developer.chrome.com/docs/performance/insights/modern-http).",
      "score": 1,
      "scoreDisplayMode": "metricSavings",
      "metricSavings": {
        "FCP": 0,
        "LCP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "protocol",
            "valueType": "text",
            "label": "Protocol"
          }
        ],
        "items": []
      },
      "guidanceLevel": 3
    },
    "network-dependency-tree-insight": {
      "id": "network-dependency-tree-insight",
      "title": "Network dependency tree",
      "description": "[Avoid chaining critical requests](https://developer.chrome.com/docs/performance/insights/network-dependency-tree) by reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load.",
      "score": 0,
      "scoreDisplayMode": "numeric",
      "metricSavings": {
        "LCP": 0
      },
      "details": {
        "type": "list",
        "items": [
          {
            "type": "list-section",
            "value": {
              "type": "network-tree",
              "chains": {
                "264C7F479DD99F237B51FBED74FB3903": {
                  "url": "https://eu.desmoinesregister.com/",
                  "navStartToEndTime": 538,
                  "transferSize": 37469,
                  "isLongest": true,
                  "children": {
                    "264C7F479DD99F237B51FBED74FB3903": {
                      "url": "https://eu.desmoinesregister.com/",
                      "navStartToEndTime": 538,
                      "transferSize": 37469,
                      "isLongest": true,
                      "children": {
                        "264C7F479DD99F237B51FBED74FB3903": {
                          "url": "https://eu.desmoinesregister.com/",
                          "navStartToEndTime": 538,
                          "transferSize": 37469,
                          "isLongest": true,
                          "children": {
                            "322698.3": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/gallium.js",
                              "navStartToEndTime": 540,
                              "transferSize": 4256,
                              "isLongest": true,
                              "children": {
                                "322698.49": {
                                  "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/utils.js",
                                  "navStartToEndTime": 1420,
                                  "transferSize": 5540,
                                  "isLongest": true,
                                  "children": {
                                    "322698.75": {
                                      "url": "https://api.gannett-cdn.com/thorium/breaking-news/?apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz&site-code=PDEM",
                                      "navStartToEndTime": 1694,
                                      "transferSize": 260,
                                      "isLongest": true,
                                      "children": {}
                                    },
                                    "322698.73": {
                                      "url": "https://api.gannett-cdn.com/thorium/popular/PDEM/10?assettype=gallery&searchtype=pageViews&ssts=home&apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz",
                                      "navStartToEndTime": 1581,
                                      "transferSize": 3368,
                                      "children": {}
                                    },
                                    "322698.72": {
                                      "url": "https://api.gannett-cdn.com/thorium/popular/PDEM/10?assettype=video&searchtype=pageViews&ssts=home&apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz",
                                      "navStartToEndTime": 1580,
                                      "transferSize": 3034,
                                      "children": {}
                                    },
                                    "322698.71": {
                                      "url": "https://api.gannett-cdn.com/argon/navreimagined/pdem/top_nav_primary/?apiKey=f6YYPA1hPnB9Y9chky5GOmrZKmaguLVh",
                                      "navStartToEndTime": 1580,
                                      "transferSize": 1823,
                                      "children": {}
                                    },
                                    "322698.70": {
                                      "url": "https://api.gannett-cdn.com/thorium/popular/PDEM/10?apiKey=TGgXAxAcR3ktiGl6cRsHSGsLS6ySi6yz&searchtype=socialReferrals",
                                      "navStartToEndTime": 1579,
                                      "transferSize": 1338,
                                      "children": {}
                                    },
                                    "322698.74": {
                                      "url": "https://user.desmoinesregister.com/PDEM-GUP/user/",
                                      "navStartToEndTime": 1574,
                                      "transferSize": 0,
                                      "children": {}
                                    }
                                  }
                                },
                                "322698.48": {
                                  "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/scripts/partner.js",
                                  "navStartToEndTime": 1419,
                                  "transferSize": 17840,
                                  "children": {}
                                }
                              }
                            },
                            "322698.42": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySerif_W_Rg.woff2",
                              "navStartToEndTime": 1667,
                              "transferSize": 21268,
                              "children": {}
                            },
                            "322698.5": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/core/bundles/section.js",
                              "navStartToEndTime": 742,
                              "transferSize": 83868,
                              "children": {
                                "322698.77": {
                                  "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/glide.core.min.css",
                                  "navStartToEndTime": 1631,
                                  "transferSize": 526,
                                  "children": {}
                                }
                              }
                            },
                            "322698.38": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_SBd.woff2",
                              "navStartToEndTime": 1430,
                              "transferSize": 18066,
                              "children": {}
                            },
                            "322698.40": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Bd.woff2",
                              "navStartToEndTime": 1429,
                              "transferSize": 18151,
                              "children": {}
                            },
                            "322698.36": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/gallium/themes/assets/universal/fonts/UnifySans_W_Rg.woff2",
                              "navStartToEndTime": 1429,
                              "transferSize": 17212,
                              "children": {}
                            },
                            "322698.2": {
                              "url": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
                              "navStartToEndTime": 1286,
                              "transferSize": 354,
                              "children": {}
                            },
                            "322698.4": {
                              "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
                              "navStartToEndTime": 544,
                              "transferSize": 1109,
                              "children": {}
                            }
                          }
                        }
                      }
                    }
                  }
                }
              },
              "longestChain": {
                "duration": 1694
              }
            }
          },
          {
            "type": "list-section",
            "title": "Preconnected origins",
            "description": "[preconnect](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/) hints help the browser establish a connection earlier in the page load, saving time when the first request for that origin is made. The following are the origins that the page preconnected to.",
            "value": {
              "type": "table",
              "headings": [
                {
                  "key": "origin",
                  "valueType": "text",
                  "subItemsHeading": {
                    "key": "warning"
                  },
                  "label": "Origin"
                },
                {
                  "key": "source",
                  "valueType": "node",
                  "label": "Source"
                }
              ],
              "items": [
                {
                  "origin": "https://cdn.cookielaw.org/",
                  "source": {
                    "type": "node",
                    "lhId": "page-11-LINK",
                    "path": "1,HTML,0,HEAD,14,LINK",
                    "selector": "head > link",
                    "boundingRect": {
                      "top": 0,
                      "bottom": 0,
                      "left": 0,
                      "right": 0,
                      "width": 0,
                      "height": 0
                    },
                    "snippet": "<link rel=\"preconnect\" href=\"https://cdn.cookielaw.org\">",
                    "nodeLabel": "head > link"
                  },
                  "subItems": {
                    "type": "subitems",
                    "items": [
                      {
                        "warning": "Unused preconnect. Check that the crossorigin attribute is used properly."
                      }
                    ]
                  }
                }
              ]
            }
          },
          {
            "type": "list-section",
            "title": "Preconnect candidates",
            "description": "Add [preconnect](https://developer.chrome.com/docs/lighthouse/performance/uses-rel-preconnect/) hints to your most important origins, but try to use no more than 4.",
            "value": {
              "type": "table",
              "headings": [
                {
                  "key": "origin",
                  "valueType": "text",
                  "label": "Origin"
                },
                {
                  "key": "wastedMs",
                  "valueType": "ms",
                  "label": "Est LCP savings"
                }
              ],
              "items": [
                {
                  "origin": "https://cdn.cookielaw.org",
                  "wastedMs": 82.874
                }
              ]
            }
          }
        ]
      },
      "guidanceLevel": 1
    },
    "render-blocking-insight": {
      "id": "render-blocking-insight",
      "title": "Render blocking requests",
      "description": "Requests are blocking the page's initial render, which may delay LCP. [Deferring or inlining](https://developer.chrome.com/docs/performance/insights/render-blocking) can move these network requests out of the critical path.",
      "score": 0,
      "scoreDisplayMode": "metricSavings",
      "displayValue": "Est savings of 150 ms",
      "metricSavings": {
        "FCP": 150,
        "LCP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "url",
            "valueType": "url",
            "label": "URL"
          },
          {
            "key": "totalBytes",
            "valueType": "bytes",
            "label": "Transfer Size"
          },
          {
            "key": "wastedMs",
            "valueType": "timespanMs",
            "label": "Duration"
          }
        ],
        "items": [
          {
            "url": "https://polyfill-fastly.io/v2/polyfill.min.js?features=default,fetch,Array.prototype.find,IntersectionObserver,IntersectionObserverEntry,Intl,Intl.~locale.en-US",
            "totalBytes": 354,
            "wastedMs": 755
          },
          {
            "url": "https://cpt-static.gannettdigital.com/universal-web-client/master/latest/vendor/components/webcomponentsjs/custom-elements-es5-adapter.js",
            "totalBytes": 1109,
            "wastedMs": 150
          }
        ]
      },
      "guidanceLevel": 3
    },
    "third-parties-insight": {
      "id": "third-parties-insight",
      "title": "3rd parties",
      "description": "3rd party code can significantly impact load performance. [Reduce and defer loading of 3rd party code](https://developer.chrome.com/docs/performance/insights/third-parties) to prioritize your page's content.",
      "score": null,
      "scoreDisplayMode": "error",
      "errorMessage": "data.Renderer.processes.values(...).find is not a function",
      "errorStack": "TypeError: data.Renderer.processes.values(...).find is not a function\n    at collectMainThreadActivity (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/extras/ThirdParties.js:17:10)\n    at Module.summarizeByThirdParty (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/extras/ThirdParties.js:30:30)\n    at Module.generateInsight (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/insights/ThirdParties.js:58:49)\n    at #computeInsightSet (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:369:33)\n    at #computeInsightsForNavigation (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:513:32)\n    at #computeInsights (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:445:47)\n    at TraceProcessor.parse (file:///usr/local/lib/node_modules/lighthouse/node_modules/@paulirish/trace_engine/models/trace/Processor.js:126:38)\n    at async TraceEngineResult.runTraceEngine (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:43:5)\n    at async TraceEngineResult.compute_ (file:///usr/local/lib/node_modules/lighthouse/core/computed/trace-engine-result.js:256:7)",
      "guidanceLevel": 3
    },
    "viewport-insight": {
      "id": "viewport-insight",
      "title": "Optimize viewport for mobile",
      "description": "Tap interactions may be [delayed by up to 300 ms](https://developer.chrome.com/docs/performance/insights/viewport) if the viewport is not optimized for mobile.",
      "score": 1,
      "scoreDisplayMode": "numeric",
      "metricSavings": {
        "INP": 0
      },
      "details": {
        "type": "table",
        "headings": [
          {
            "key": "node",
            "valueType": "node",
            "label": ""
          }
        ],
        "items": [
          {
            "node": {
              "type": "node",
              "lhId": "page-12-META",
              "path": "1,HTML,0,HEAD,4,META",
              "selector": "head > meta",
              "boundingRect": {
                "top": 0,
                "bottom": 0,
                "left": 0,
                "right": 0,
                "width": 0,
                "height": 0
              },
              "snippet": "<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">",
              "nodeLabel": "head > meta"
            }
          }
        ]
      },
      "guidanceLevel": 3
    }
  },
  "configSettings": {
    "output": [
      "json"
    ],
    "maxWaitForFcp": 30000,
    "maxWaitForLoad": 45000,
    "pauseAfterFcpMs": 1000,
    "pauseAfterLoadMs": 1000,
    "networkQuietThresholdMs": 1000,
    "cpuQuietThresholdMs": 1000,
    "formFactor": "mobile",
    "throttling": {
      "rttMs": 150,
      "throughputKbps": 1638.4,
      "requestLatencyMs": 562.5,
      "downloadThroughputKbps": 1474.5600000000002,
      "uploadThroughputKbps": 675,
      "cpuSlowdownMultiplier": 4
    },
    "throttlingMethod": "simulate",
    "screenEmulation": {
      "mobile": true,
      "width": 412,
      "height": 823,
      "deviceScaleFactor": 1.75,
      "disabled": false
    },
    "emulatedUserAgent": "Mozilla/5.0 (Linux; Android 11; moto g power (2022)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Mobile Safari/537.36",
    "auditMode": false,
    "gatherMode": false,
    "clearStorageTypes": [
      "file_systems",
      "shader_cache",
      "service_workers",
      "cache_storage"
    ],
    "disableStorageReset": false,
    "debugNavigation": false,
    "channel": "cli",
    "usePassiveGathering": false,
    "disableFullPageScreenshot": false,
    "skipAboutBlank": false,
    "blankPage": "about:blank",
    "ignoreStatusCode": false,
    "locale": "en-US",
    "blockedUrlPatterns": null,
    "additionalTraceCategories": null,
    "extraHeaders": null,
    "precomputedLanternData": null,
    "onlyAudits": null,
    "onlyCategories": null,
    "skipAudits": null
  },
  "categories": {
    "performance": {
      "title": "Performance",
      "supportedModes": [
        "navigation",
        "timespan",
        "snapshot"
      ],
      "auditRefs": [
        {
          "id": "first-contentful-paint",
          "weight": 10,
          "group": "metrics",
          "acronym": "FCP"
        },
        {
          "id": "largest-contentful-paint",
          "weight": 25,
          "group": "metrics",
          "acronym": "LCP"
        },
        {
          "id": "total-blocking-time",
          "weight": 30,
          "group": "metrics",
          "acronym": "TBT"
        },
        {
          "id": "cumulative-layout-shift",
          "weight": 25,
          "group": "metrics",
          "acronym": "CLS"
        },
        {
          "id": "speed-index",
          "weight": 10,
          "group": "metrics",
          "acronym": "SI"
        },
        {
          "id": "cache-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "cls-culprits-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "document-latency-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "dom-size-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "duplicated-javascript-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "font-display-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "forced-reflow-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "image-delivery-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "inp-breakdown-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "lcp-breakdown-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "lcp-discovery-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "legacy-javascript-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "modern-http-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "network-dependency-tree-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "render-blocking-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "third-parties-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "viewport-insight",
          "weight": 0,
          "group": "insights"
        },
        {
          "id": "interactive",
          "weight": 0,
          "group": "hidden",
          "acronym": "TTI"
        },
        {
          "id": "max-potential-fid",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "unminified-css",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "unminified-javascript",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "unused-css-rules",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "unused-javascript",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "total-byte-weight",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "user-timings",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "bootup-time",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "mainthread-work-breakdown",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "long-tasks",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "non-composited-animations",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "unsized-images",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "bf-cache",
          "weight": 0,
          "group": "diagnostics"
        },
        {
          "id": "network-requests",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "network-rtt",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "network-server-latency",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "main-thread-tasks",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "diagnostics",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "metrics",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "screenshot-thumbnails",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "final-screenshot",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "script-treemap-data",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "resource-summary",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "redirects",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "server-response-time",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "layout-shifts",
          "weight": 0,
          "group": "hidden"
        }
      ],
      "id": "performance",
      "score": 0.23
    },
    "accessibility": {
      "title": "Accessibility",
      "description": "These checks highlight opportunities to [improve the accessibility of your web app](https://developer.chrome.com/docs/lighthouse/accessibility/). Automatic detection can only detect a subset of issues and does not guarantee the accessibility of your web app, so [manual testing](https://web.dev/articles/how-to-review) is also encouraged.",
      "manualDescription": "These items address areas which an automated testing tool cannot cover. Learn more in our guide on [conducting an accessibility review](https://web.dev/articles/how-to-review).",
      "supportedModes": [
        "navigation",
        "snapshot"
      ],
      "auditRefs": [
        {
          "id": "accesskeys",
          "weight": 0,
          "group": "a11y-navigation"
        },
        {
          "id": "aria-allowed-attr",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "aria-command-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-conditional-attr",
          "weight": 7,
          "group": "a11y-aria"
        },
        {
          "id": "aria-deprecated-role",
          "weight": 1,
          "group": "a11y-aria"
        },
        {
          "id": "aria-dialog-name",
          "weight": 7,
          "group": "a11y-aria"
        },
        {
          "id": "aria-hidden-body",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "aria-hidden-focus",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-input-field-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-meter-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-progressbar-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-prohibited-attr",
          "weight": 7,
          "group": "a11y-aria"
        },
        {
          "id": "aria-required-attr",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "aria-required-children",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-required-parent",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-roles",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "aria-text",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-toggle-field-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-tooltip-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-treeitem-name",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "aria-valid-attr-value",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "aria-valid-attr",
          "weight": 10,
          "group": "a11y-aria"
        },
        {
          "id": "button-name",
          "weight": 10,
          "group": "a11y-names-labels"
        },
        {
          "id": "bypass",
          "weight": 0,
          "group": "a11y-navigation"
        },
        {
          "id": "color-contrast",
          "weight": 7,
          "group": "a11y-color-contrast"
        },
        {
          "id": "definition-list",
          "weight": 0,
          "group": "a11y-tables-lists"
        },
        {
          "id": "dlitem",
          "weight": 0,
          "group": "a11y-tables-lists"
        },
        {
          "id": "document-title",
          "weight": 7,
          "group": "a11y-names-labels"
        },
        {
          "id": "duplicate-id-aria",
          "weight": 0,
          "group": "a11y-aria"
        },
        {
          "id": "form-field-multiple-labels",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "frame-title",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "heading-order",
          "weight": 3,
          "group": "a11y-navigation"
        },
        {
          "id": "html-has-lang",
          "weight": 7,
          "group": "a11y-language"
        },
        {
          "id": "html-lang-valid",
          "weight": 7,
          "group": "a11y-language"
        },
        {
          "id": "html-xml-lang-mismatch",
          "weight": 0,
          "group": "a11y-language"
        },
        {
          "id": "image-alt",
          "weight": 10,
          "group": "a11y-names-labels"
        },
        {
          "id": "input-button-name",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "input-image-alt",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "label",
          "weight": 10,
          "group": "a11y-names-labels"
        },
        {
          "id": "link-in-text-block",
          "weight": 7,
          "group": "a11y-color-contrast"
        },
        {
          "id": "link-name",
          "weight": 7,
          "group": "a11y-names-labels"
        },
        {
          "id": "list",
          "weight": 7,
          "group": "a11y-tables-lists"
        },
        {
          "id": "listitem",
          "weight": 7,
          "group": "a11y-tables-lists"
        },
        {
          "id": "meta-refresh",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "meta-viewport",
          "weight": 10,
          "group": "a11y-best-practices"
        },
        {
          "id": "object-alt",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "select-name",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "skip-link",
          "weight": 3,
          "group": "a11y-names-labels"
        },
        {
          "id": "tabindex",
          "weight": 7,
          "group": "a11y-navigation"
        },
        {
          "id": "target-size",
          "weight": 7,
          "group": "a11y-best-practices"
        },
        {
          "id": "td-headers-attr",
          "weight": 0,
          "group": "a11y-tables-lists"
        },
        {
          "id": "th-has-data-cells",
          "weight": 0,
          "group": "a11y-tables-lists"
        },
        {
          "id": "valid-lang",
          "weight": 0,
          "group": "a11y-language"
        },
        {
          "id": "video-caption",
          "weight": 0,
          "group": "a11y-audio-video"
        },
        {
          "id": "landmark-one-main",
          "weight": 3,
          "group": "a11y-best-practices"
        },
        {
          "id": "focusable-controls",
          "weight": 0
        },
        {
          "id": "interactive-element-affordance",
          "weight": 0
        },
        {
          "id": "logical-tab-order",
          "weight": 0
        },
        {
          "id": "visual-order-follows-dom",
          "weight": 0
        },
        {
          "id": "focus-traps",
          "weight": 0
        },
        {
          "id": "managed-focus",
          "weight": 0
        },
        {
          "id": "use-landmarks",
          "weight": 0
        },
        {
          "id": "offscreen-content-hidden",
          "weight": 0
        },
        {
          "id": "custom-controls-labels",
          "weight": 0
        },
        {
          "id": "custom-controls-roles",
          "weight": 0
        },
        {
          "id": "table-duplicate-name",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "empty-heading",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "aria-allowed-role",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "image-redundant-alt",
          "weight": 0,
          "group": "a11y-names-labels"
        },
        {
          "id": "identical-links-same-purpose",
          "weight": 0,
          "group": "a11y-best-practices"
        },
        {
          "id": "label-content-name-mismatch",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "table-fake-caption",
          "weight": 0,
          "group": "hidden"
        },
        {
          "id": "td-has-header",
          "weight": 0,
          "group": "hidden"
        }
      ],
      "id": "accessibility",
      "score": 0.85
    },
    "best-practices": {
      "title": "Best Practices",
      "supportedModes": [
        "navigation",
        "timespan",
        "snapshot"
      ],
      "auditRefs": [
        {
          "id": "is-on-https",
          "weight": 5,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "redirects-http",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "geolocation-on-start",
          "weight": 1,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "notification-on-start",
          "weight": 1,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "csp-xss",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "has-hsts",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "origin-isolation",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "clickjacking-mitigation",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "trusted-types-xss",
          "weight": 0,
          "group": "best-practices-trust-safety"
        },
        {
          "id": "paste-preventing-inputs",
          "weight": 3,
          "group": "best-practices-ux"
        },
        {
          "id": "image-aspect-ratio",
          "weight": 1,
          "group": "best-practices-ux"
        },
        {
          "id": "image-size-responsive",
          "weight": 1,
          "group": "best-practices-ux"
        },
        {
          "id": "doctype",
          "weight": 1,
          "group": "best-practices-browser-compat"
        },
        {
          "id": "charset",
          "weight": 1,
          "group": "best-practices-browser-compat"
        },
        {
          "id": "js-libraries",
          "weight": 0,
          "group": "best-practices-general"
        },
        {
          "id": "deprecations",
          "weight": 5,
          "group": "best-practices-general"
        },
        {
          "id": "third-party-cookies",
          "weight": 5,
          "group": "best-practices-general"
        },
        {
          "id": "errors-in-console",
          "weight": 1,
          "group": "best-practices-general"
        },
        {
          "id": "valid-source-maps",
          "weight": 0,
          "group": "best-practices-general"
        },
        {
          "id": "inspector-issues",
          "weight": 1,
          "group": "best-practices-general"
        }
      ],
      "id": "best-practices",
      "score": 0.92
    },
    "seo": {
      "title": "SEO",
      "description": "These checks ensure that your page is following basic search engine optimization advice. There are many additional factors Lighthouse does not score here that may affect your search ranking, including performance on [Core Web Vitals](https://web.dev/explore/vitals). [Learn more about Google Search Essentials](https://support.google.com/webmasters/answer/35769).",
      "manualDescription": "Run these additional validators on your site to check additional SEO best practices.",
      "supportedModes": [
        "navigation",
        "snapshot"
      ],
      "auditRefs": [
        {
          "id": "is-crawlable",
          "weight": 4.043478260869565,
          "group": "seo-crawl"
        },
        {
          "id": "document-title",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "meta-description",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "http-status-code",
          "weight": 1,
          "group": "seo-crawl"
        },
        {
          "id": "link-text",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "crawlable-anchors",
          "weight": 1,
          "group": "seo-crawl"
        },
        {
          "id": "robots-txt",
          "weight": 1,
          "group": "seo-crawl"
        },
        {
          "id": "image-alt",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "hreflang",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "canonical",
          "weight": 1,
          "group": "seo-content"
        },
        {
          "id": "structured-data",
          "weight": 0
        }
      ],
      "id": "seo",
      "score": 0.54
    }
  },
  "categoryGroups": {
    "metrics": {
      "title": "Metrics"
    },
    "insights": {
      "title": "Insights",
      "description": "These insights are also available in the Chrome DevTools Performance Panel - [record a trace](https://developer.chrome.com/docs/devtools/performance/reference) to view more detailed information."
    },
    "diagnostics": {
      "title": "Diagnostics",
      "description": "More information about the performance of your application. These numbers don't [directly affect](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) the Performance score."
    },
    "a11y-best-practices": {
      "title": "Best practices",
      "description": "These items highlight common accessibility best practices."
    },
    "a11y-color-contrast": {
      "title": "Contrast",
      "description": "These are opportunities to improve the legibility of your content."
    },
    "a11y-names-labels": {
      "title": "Names and labels",
      "description": "These are opportunities to improve the semantics of the controls in your application. This may enhance the experience for users of assistive technology, like a screen reader."
    },
    "a11y-navigation": {
      "title": "Navigation",
      "description": "These are opportunities to improve keyboard navigation in your application."
    },
    "a11y-aria": {
      "title": "ARIA",
      "description": "These are opportunities to improve the usage of ARIA in your application which may enhance the experience for users of assistive technology, like a screen reader."
    },
    "a11y-language": {
      "title": "Internationalization and localization",
      "description": "These are opportunities to improve the interpretation of your content by users in different locales."
    },
    "a11y-audio-video": {
      "title": "Audio and video",
      "description": "These are opportunities to provide alternative content for audio and video. This may improve the experience for users with hearing or vision impairments."
    },
    "a11y-tables-lists": {
      "title": "Tables and lists",
      "description": "These are opportunities to improve the experience of reading tabular or list data using assistive technology, like a screen reader."
    },
    "seo-mobile": {
      "title": "Mobile Friendly",
      "description": "Make sure your pages are mobile friendly so users don’t have to pinch or zoom in order to read the content pages. [Learn how to make pages mobile-friendly](https://developers.google.com/search/mobile-sites/)."
    },
    "seo-content": {
      "title": "Content Best Practices",
      "description": "Format your HTML in a way that enables crawlers to better understand your app’s content."
    },
    "seo-crawl": {
      "title": "Crawling and Indexing",
      "description": "To appear in search results, crawlers need access to your app."
    },
    "best-practices-trust-safety": {
      "title": "Trust and Safety"
    },
    "best-practices-ux": {
      "title": "User Experience"
    },
    "best-practices-browser-compat": {
      "title": "Browser Compatibility"
    },
    "best-practices-general": {
      "title": "General"
    },
    "hidden": {
      "title": ""
    }
  },
  "stackPacks": [],
  "entities": [
    {
      "name": "desmoinesregister.com",
      "origins": [
        "https://desmoinesregister.com",
        "https://www.desmoinesregister.com",
        "https://eu.desmoinesregister.com",
        "https://user.desmoinesregister.com",
        "https://atoms.desmoinesregister.com"
      ],
      "isFirstParty": true,
      "isUnrecognized": true
    },
    {
      "name": "polyfill-fastly.io",
      "origins": [
        "https://polyfill-fastly.io"
      ],
      "isUnrecognized": true
    },
    {
      "name": "gannettdigital.com",
      "origins": [
        "https://cpt-static.gannettdigital.com"
      ],
      "isUnrecognized": true
    },
    {
      "name": "gannett-cdn.com",
      "origins": [
        "https://www.gannett-cdn.com",
        "https://api.gannett-cdn.com"
      ],
      "isUnrecognized": true
    },
    {
      "name": "Optanon",
      "homepage": "https://www.cookielaw.org/",
      "origins": [
        "https://cdn.cookielaw.org"
      ],
      "category": "consent-provider"
    }
  ],
  "fullPageScreenshot": {
    "screenshot": {
      "data": "data:image/webp;base64,UklGRoL/AQBXRUJQVlA4WAoAAAAgAAAAmwEAlBAASUNDUMgBAAAAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADZWUDgglP0BANDUCJ0BKpwBlRA/EXy2VSwnP60ncyu78CIJZW77oS/7wX4k0H1c+Q0Zs0/m/HMPI/3Phy3sfY9lb9jNx9nveV37QyA+mf73dQyD9j/zd2Fyf/Z6a2VR1fm//B97f/xewL+t+op/delT/hvRB+1Pq4f9/16/5H0qvSy/9ftGf3n/r///3IPOe9Y//K9IB//+Af+R/5H/G/4b/Gf7b+7/vD9XvmH8F/qv8L/nv+P/f/3g9vfzT7R/d/4f/Tf+b/JfL/+Z/8/+t8qHuP93/5/9t/uPZL+g/kD+H/h/81//P9D8z/7b/sf5b/T/tr6m/Mf/d/yfsF+0f+n/cP3++EL8n/z/7v/c+PBt3/L/8v+79g73R+z/+v/Q/mN77X0X/R/yH+m9q/1T/Jf+X/Jf6b5Af6X/fP/L/kvan/m/tT5pH4f/kft98A/9X/zf/t/2X+l+HL/L//X+8/4vqw/YP+R+5HwH/1X/L//f/Z/8f2////8Ofz////xbnH7CBFPVCUQQC9joRqzUELubf4MI5y2LMQX6vzANiryg3sTrVA+2WRWCjDMFtPbWMzACOQe9bVurTwQX63ico1dJ67JNrN92tNg6sD8jY4k15Ez8WdcK4yRvKznRVeJ/Lk2gNhoVQ9i2Pi2at/Y1P43jqC+yndUrujCTKzaygrX2tAy4PbbmExA0/2C1FG88unv44FHNKnLGAYOBzf5qu+7M2/TzY4qarmpGVPzDgc4S7zHUKGvnu0EeUx07cm7kkfLmMfBNXQvnBTw5wNYsM9ktC8nhOpuxxqG67OF0L8CdSfdUCHlqukGXcCpdbV0WgtgLSFb668M88bMjdQO/lXlh0TMovI6BToKaaVoBgrhva/9LnA5RC/owujT1GsDQTWp3MISpHob2MhUxaNNflM5DDpcD0agmb18vw/dzia5US1smObN9i5pPAuK2aB+5qLfquboevr079ScDqQKsS/dzGmf2giOx+eDp0l5aGpk9hyTv18m6VrX79MQKhsHYY6YDlIF9gpGJXfxnzxzG2KyCBdH/RLcVgkqKMqcTovYQUOrMapSf0P8Hcx2Hya7SqLN23U2CUkiQFfLO+rdiFTocMfG0g1DdRAfWxBO78vIcgRC6R+KOIYkl54ky+UH3TV2wIaSnivy5EvjJRDZD3BealSB3bs+wcDrTKQuDsI7iRICHi4YE0yUvqGinGHYGNR1XXPm1glASLKy3m270VIgdqqdcU/bnvXfL5WnWJ9AJhhF8mXvMlHKWh5r64nViGbi3A/k/ioc2+cXdu4TjbsZk3nRQDxmxEXKZT1mb+6IKBMuoucXZ3o686wzQ2n7lacPtSXuIFxUTuuP/e/dGzKZF5OY9RtA05hDQOg6Y2uFIOf2p9NCuRK/rXgVkUq98bp8JlnOPnaj2Te7k8/OxxQE4W8S3sn+AMr6LE7LVYupxecGYbBS4AAmhvJ+Qa8ATkBWWHYObPj52yu7JGMrg6sG5vn24eG5pcVLYkCeoSwH8ISsY7+H6hKlPjrMPztsNt4tEhqpgA0ufdGO4fTZeS00bqPifJJzWW8C7I5vXkMdmHbkyN6OXKJfwdQ8I1Jg7OqLZowMerXc/Q4ip7i7OqQexsFEgsGDm1QpbY7INiJuiFXd3Ja5g6tJ/ExjPXFnifE+uat6NNI9x7a2+fVOEc6CXycZrtWVEDA82Q9u6ZgYW6rg5i9fdtXkq11OUtHzf4+qgNhzx9aGCMnuiLFvjOSDukfV8hGlMYOalj/PudTCtBymPFljiKude4s5zEsqRsmwJOUAjjHnraTcsh5CXWYDY7f7eoe+jGed2CpLzteQRr1Wo504fNhkXehqQUAxfF8YNx2j1xMCuJDiFHhyWmUttCvW5MOSXM0CVc4VRqM2Iip+DKcpraGCWV6WURK6CamY3o+hhy91SFay75WByLfGTb6L17GwUHOIIYw+34lS2DksIgLmdKTteYpvF2mxKmRUkDVxp4KPHpYQPusCq/i+OZg2WtvydElt5gNyrFNqvEJ2TR4Mfa6jjII7hUC2LBCrH6awDAOzp3R2mdS401nuZXFeZfqUNWgsxHR9RXKzwwh5xpbVYheP3aHEX+a684Y3Reg7xD3uGCbnkn2FziQvSqgXdlmExyUNgAMNgV4v8tIbm9LakzO50NzILbFvkKURVbFGZ7xyKMrith39gOCWKf5lKXIZ2VoqtiRIvPxceie0VCg+tTG2oqaSO/eh93uYVLdW2m6+3f8yiasRgEFXvXGoUJlRGeP32R8B8QC/YrQDSJY2FxH6I0/QWZDhSbl01FWThC8zfak92LHzf10SRjm6pTHH/DhwbfiKYmaNh6Oj3kYOi7TxcmzoJ4Wkke3Juvgi5ZV4a103J+KrLg49pCBDC+YKeoY6CoH8t6XZo/EaU09dBYNXcninRDzjcG/cfezoiYZHXw81OOb+2GfFA8NIpN4CoDTU2yS5YkkDAQhwVh9u8Hnq4KGni//joD7B65XRIKKjQijqeJJtUnNd9Bw6KzclBT9oK6vEjlmAzEhzrvIA1n68kcgZQa0JzivxuCYVZsJaiYLq0I1an0oAEBENRsfvArE9q1atpM1A8eYiTwOabqLnRdCb2qHurqj8ypbdKFIS4oaGUF9Vjh5xQvDcLU29oeeIZdmhkWPjRrvDZoerPSWZ2bkYV5bgXcJcp5anJUMNkAdWxJxy/7piDKqZ4U8uP6cI8sGW1idejJ44sbsn1g52+lm/3U3olejfCliPjgDQ5qGHfjsSa8iYV8HsVKBC8QZ+lcHIW66DiFFv3kD5Z6rv0+deJCqfi7Uzwp+LPwZkq/Z4XMPg8+uu4Oo4xPhwNKc1UYAo8MTT/4IXoK22+LPwfkZlWySbRgsj7wfnFyQwh43GrUiAr0qWkkHMhjGPEdlg2X6m3YSOfSw09/7TntVSxyVTanbqB0kwaHcEnSpXfYau9C6otERzkXk6Gg9+i9/85yZbFFei4ZjiyoXtbFPQT+fFLGpDG+Qcp9nsAiFJlySY6QDtXxly0G09cxsOU3zS4TgAdZgAy33PliQ7xkDVIBDcyIfk7hDTdqpBMk+UKkbP8FFuZ5VLIbS0hcnIwZSVGI8kPlYAHzr5jYXQ9cVHuRNcweYahhi4CG6Xnq1DMzGkQ89ZwdA0VmjcEwafJa56yUkbWBw4CrIcsz1wnxIFW/h1CPtdsMavSXJ8ISacguLpnTEirjmxAFx6P2tEvRRX9oytEuwB6RRAKg5sV5ArMAJyXuwSAk0uL7n6iENpIUbOleBeqyJqbxYU6ZeXuZpAJ0QTxM4P2R0XYLlwvZ80Xnr7Vws7lOE+vUYVz5DT5eqdzQ5JKbWsmoSRo9mnqKk6lLerF5QG7HAb/S1R3LCEkmG+C0+wMS08JULJIzPNkof7o9tBXlA6nRejODYTlJ3/08Dedno92hlhUvOxrbAeWF5gqkvwIZo0jaEF92BT3xlbzn53tIDjXYUa7jWiNofTUTGOuwgLirXe+CA7pz+RTpv5LhMWcWhdVzMHag3Kz5+KH3hOMULZYlcd5SCySFJGvJ7sKfi8985+RscSaxM0uAw8Z+Bt9pcQj/G6yJh0MGsK3lJhIo+dNvR6f7Mgpiya5h6zgK5+D8jY4k15Ez8BB2c0AXOJg+sf/D0tqGbN+uMSmYviYLszi2x6KtJi7IVO7PSj+7q4mIwOGkJpFMgEOlnC7tKsx+Nu4YE42bDSufC711xoqhBVzL4EJDKbH0ptojMumjFwZeukzbUIxMXhGr32hpkem4CMqg6PzptVZlYMs2FTbPdUNhTvxpuGdzTikHIW74tEDMP9s8MszGEC9naeP7uHMpxdqlESXWaHmLNOAzxMBk9gL8LDHEJTZcucGIj1H2iX8qQK0NbeYAD6xctjlrDMfbmhTueRFv+vfRuwMnZLhLHf3HtihbBGdkzmJIBbwZCuafF9BKKnEXfpftY09BImY5q1ISLAAdIf/2uBeLP38+i2o3OZyhqoXC6yet87GkRX5i9rvlynWe9c6mDIXxNN+JdNkVSZhBVdvgFFRsc2pJw9pLFYK7guq5wbCDX94Xv13q6X2U51MFHdpBmHAA4X47totu52pmpa4nmVLqZDqYtfJmlxCbxI3NqADQraJni8O+qmaFcOyHhi9D3lXseayl4cIcxASXVlQHihx+VP+VBICxojD51tV/vEV+lpbB6oYPbq1/17L2SAJR3liArz0TE23HQcSW9PbT+QPD+rWEMI8pxiymmB94kOTcTR7mXoxrhvI4fDsGB0FdAsI60PZnf7u6GcLNuEt5ATRBKmv08ea8iZ+LPwfkbHEUcuJD7CJ2xh1EpHF/fFqvKAZcOZcmobqyUrupEK205kSMT3/TOwSx9Ib563RGOqlGsCtkzMsdR1waJyBtGUaqS07W2p39E51gRGh3xHdwt9+9Rz4mjRVAT+MYIDU/aBxEZfe3azzih8bkS1cKYD9ymy6NxaVQPqv76P5RvYB7/0ToQK90wSnsfvrn0hdYX7w88uUs4qRc97DEcGJLfhurz7R6MvhI7R7ynnDYQb3JIN8BEsBY1kT37tPq60ii3GtDRp9KOomi+73RNG1ZBCDDmyapC19OeVdIYkvzZfHKyb8c7n4Ek7pJUau1RWW2QxVhL/uaAq7cyqa8U5Xb0f9QfV7vZvdu6JNuteteYx53XCTsnttwpFutpuYsbUtKvQhzFPHTGfEr7IRh0JushNGi21/zVcLLKhY45gGFRTJ7WVCLwpNvyO3wrjvfpnMgazILW8AWtEMv096tHs1gNmdADpeFsGCesB6iFu9ObYfHhedLECdh506Z1vgC6sbSM3NEOXG1lGUgcf929kiA6aTNfhZkjqyxxJiHQM0lAEQCkjcCesSe5hdSMMqkf9V1S3rogdczEiDNzrU56iWP1Ife3LKQgwjHg5Uos5m8wlEnfO/vtTOBrqxQMCS88A8Qg/5BwI3CzjdGHvoOR/5LahGuU4K9BhF++6i/pHhT8DSJn1FGWuQdR/XUW0PYLNRKX27WE+T/OxbsJAlj+MGUFbpz8H5GxxJryJn32gRhAfxp3R3pmBfBrAULsaYdhJSHFadmpMl6Y/qz2/If06/Gxini3dWlba7aKbNCZ5h1Uow358NCdXa7A4LtnduCAdYsgGINaRDrrV8tO16s766LdPMC9s7rdiZ0VTSGi9JABhWUC+6ghpHdHz+uvoCY5eOAoBmVJDULABMV64NEAwVOn1N/d51ClVHdGJcdzmvVDEQMdLkEyM5hYNjyL36thURA19m6+QJx9RU019lGUG06AYGsfiWS4Z9nO3HYyDy4J0MoJEBoyOkzsF0rre/thAakWGqhyHn+pEBev3xR5I4qNND23Pmt1LkjB50BA6FXLalo6gXKHI38g9HIgJpc/uB4GXQGUkNuOgwww1vXbcy9VsmnijBrlLiPfAJBtVPuapcBfRm+Le3lsiUyq4uAq5xvKdKY/XsLj0C/ch2iCpcLbaywMNieGFKcNZNTJqSt/aneehGLv89YLiuoq7j0wOTONw1DXUM+umT7iII7avMEFSm7r5yJjEtR1bQbOGB4yFcEGzsgK+/G54l7T3SYPknsm9MWTbpCn4s/B+RsLJUfKPyYVl5Dxivxf6FX+W76IaNejtcqcu9I7WpOP33USa8iZ+LPugFsN3vEnwm3qmNBO512tBlrMhEtk5nWPgi/4rxpwHttQApL0U1M8KAKceD68P3296Fc3lk0si7SXm3ZIP2ETBgCG98ngdAv80tdZqapocBw5ZNZMGjCpCHflu+WUhI1ErWF3mZnGyq4x/zHcFsZg8QG8mslOeiUbtbHh3dPuyc5/zUfBABszZx7XySnqQTcM7iRDMKjBSCeyB0L9NvDeqhhvztZ6c5QTYsH9peBsDf96Qr2FeRbAQTX27gx++RZYE6zygpC5c8xR4Bq2Mj2zWyNjQ5L9V2lj5i/4zzOYC9ZotynHhwkHHLZgJ/T5YSNRchMwfYrCIWXYeKGf6Rsq8N09oNfpxOxItNJ4UbmWR6nssjKqvC/asliufn6gNiJe3u3VWDauYovKOi0v8cofKoysPCw4fjjJsn5dNvdClks/Q7ivyMAA2Z+UABFpm4C219eG9wxHXvAQJX4MCJ/Z8Wfgu3LyiX2rUhs06QCesFF87lAk8SAWoqsCZ45ilxW0deTgV0ooVT8XameFPxZ+C+EBwshZuCBVKn6VBsIt4PDuoiBvMUKTFoqRs2B+NQdlZNcud4CDI7f2bUzwp+LPwfkbELRBeL1WgAwQmZorHzTvIbMxtyXslL1tQRK0oB3iQ4GEXecdem3c0v1asqfi7Uzwp+LPwfXtL872jQ3MHU9KLdHBPPHAT3vaNTedSvKYN/3I98vK/ZkqDwZ6DK0gzt5G/VKkNU2+XV1m7tUYLXBWU2+6lBSKt3jWc5sYVnrGlkyQwRd6r/Aszn5jNM5Hba4WO0XsXODcvVJvyQhc5JTq9SoxQwzObcuqVWeVBuOs5YN63wRjYqaaO/FIBmdOFJ7WmM6WnwmwnBNxhNd+kQRxvWLPqvS3AWqVOzlP9MwJz7pK3vqCSSzCC+8G7OPVQMX2LSdDuuVeNay76uEaSEZI81lbigNbaRmhNktu8HRBEaArVS8cFxzAHFcL4Tz1ObhEMnAmzrRZ8SSMCySP8J7BClSX/Et2PfECWaCk3dbWOiM6HeAc7XTPmLXv/lnAJ6Jc5qHdn9XYvTgtMIUBMT7bavOlpPb7KuxPYPnYiz8xd3QVz6+NB/smrqjyURDs1clYUm4p7CIt+DCWubcQ2ILOMrH8palO3L+wxAICKLxAM/Cuhh4sg5pkIrNjcUzeytaWRiG+1AM5i/+FPxVghxuVAFOQU1CcCqCaqhG3X3tOXhzhMK38lSLcjYsEYjUeGi3fyQl4h0Fc+viz8F7SJVOapsoIiJjH5A7gEoPIJVZP/o0P15jytmHaZ4U/Fn4PyNjdF+DQq65ySKWMGUfZJH0Mu/hP9s2FCf27XfZPamK9ZH0hfzwCd2V7iz1uPAkOH7UkgcbuziS8XDZAfnCWwXp/4Xj52FcnXkG0aN+a1dJhfUUrIn4UYtTDBOc7jzFIkf6z6+BWOBtow8r1/uFG/pYASSupz8MEGBV1AMACXdEGNg+bR9rtbsv3a+mYWFUknOgGVpqTjFeN+fH2iM1LF/sPBZxsHbLWLdYnXsBfUyOsocd6SQmSoH8IgafpnO7U7Mte9yqm5bA/0erMnBBL7SZt/bsiEaTKZwzWt9LJD8KirW+Wdcdx402HJNEeu1P9LGgvHmTAc40Zqoq17sWVf7ExEH/338dulu7DVUvx1HjG6XSFdpi+puV5KhtY7Ymy964L+qTUKxPHNNcTk43JxlBp70bB0bddwA6UIKjOc1aPTYJnGaIRx+Wyr7fnKXepR5pfYI+gxW0v5xbNM+uH9NjM7bj5ZBqowzPirnvLKSTr+jANTx4ptHn7TnJPKMa6jBkJx2ngX/UCfQFmWPXV1Ts45zHWs9abEWTxAo+aFwQjlWI0gmq2bLbmUArLnZgNvKZFtzKb9Y51dp6KnREXBQGjrO2bSy7iNpD00C+5N6gIxMKyiroZNtbkGnY1dTq2TdvEoSr/TQ7KVuf+UUj3rZDkD5pZMouwhwkUCOvLA3Vw0zBoWyU61nnde3VQpKz4s/EOXBL57t/BvArXTK835QA1/n6bruOATdCM044FbQsRK6VO9ugjkbPFL6be2xt779TPxZ+D8jY4k1ok/Wh+kOX3ZoOGlc5YtjM9SGgNLWvtQVKhdoj/7V1E8UVIkOonpIsvBUP4Qt/xlWZehzW3WJ3PLoroXw8K0OhKusOLrd3Fto8+Q3pf1lYFMYBJD/yW3ILT1nERWd01McrRi7fgUkFxZrfnnixZXG9+ndO46HHoVNIDu93foOkjc5kqw3+Po8QWfs368UfT1PdGCplgrg/2h3Flm2t8p1ejjvaZ8kxaIVOi/jvI4NqOI2Sl1YRT+iipc8e0NPpYArzDgkqsowVahOfrDYYXHLH9HPqwpUOc4PxUik74azUCP7xS7pm6SpgcgO+syzb956cT7V5vYImRi8cp6JXU/+nBEdswlO6HzTz72p6aZcNl27LZ9gL2mMT0Df/LkVlTC8Zt16vhc8B4NV674ZiChXcBFR4qTUZEQ3Z9hWhEdu1ft4uI7PicaqBeKy2zafq3RnKH5iW5Zxs75rm+wle70AwjbwlAkvhWh+wBuj7zEvcts5/i7CqPDJoeKIHyE+L74mwIPCiS0PxDYRyIk3AUCQp+yx9rjCCiYxva+VASAUdYtaLw/sgGWHaUugR0WsFd5euHtt77HumagNFt+xiEjI3ErvhdXp9ksG5bR0Qi7ekB3NMsw5VMWnikKqB4Wqp22+KtrIMOf1YntFyx9xx7J8O5o1K/T8uyU8T+JfGTyggHjQxz80223xZ+D8jY4kwibAxyw3bpc4Bx9DbGSiIPcz0jbRMb8DqXtoALl73KfwmL81peimpnhT8WepoN4x05lK6cmwFrLvr3rzvzoiYMsQ5ys/XIcLrkafsiH857MndJafsf7ZQhEtkJ7pS54XAR7pVT+8yPRMzqHx2EGdFn3mH90WY6X4u9r6q1WaYvduhflWt17idT1Jq3BLAieD7XKSquqkBQvwh8xJvYGrCbT2ueHtzLOfFrN4pwmod2LXJMB7XZOfEaEysP+pbpAOMziMbKkhSDIq3+oYnfyXIDLHjLhRjL7dhiP5OL260Kie4e6dzIJ6wkT8RVy4l3Fi926xEluPn3E00Qacddr9HjhzVI/qFsqz7rGUHCKcu9b/z5iViLJRfNdV5GN7Jjk3AbGSVSsGXSTVlvvdolg3EulXUnZ1nTAfwXUOO9GaG4PJLK6SiZ0o5lKPHizWCsC7CIxhhwX22IozbdU/ZZSRnHfgGUBe8GPY9KJInfE0kP+1A3Ir4fmL9mIQB+19doztRejvqq4yWDxFIBqwUkQZc6FnCkjfz9D3gDVkyHoh/e8m+jK6MQ+ol2Gz0oxqn399XhHheqrYMLj1G2M7lqP+wRz/0OPo13+6txxZ4f8XqrxZi/xNaoaolg8Kg3zJrknsZO7x+I0OFaDH833zGgYWyjsiZghSHLPcERqSWMfj9bKLHtuC9/ezDh0RhKR5z/tVx0a9quMe88CmHTR0ATaPrxJuRnqfeI/bFIN1mwlcBaTA1AV6EY1Bxv+R6PZODEGmZoo4Px2Ci+n6zA0dC5BJi3aSasoPfHoO5bUYzktrS6woFvJkTPwb8L5FgrFm81Xa38bENakNlv3urMNEGRwSy50wjEm3cLdEdRJryJn78mXC+vaHkMyGEoIWRgKMBoiLHCpQtiItvEVsa+erCEexJlU7NdeKZ3MmZ7qcG9y/0ZxunspstqUK9rLhqdVE/ridm3EwOKcGdH2Xg9oTDZNCPXUXOzBAPLxmpYSu59poW2ZwuhZ1klAQJTLqrdirr2MWoIEs8+SeN4EgZwJhvyceauJkI/oHA5kcHLq0qjZKsNVlob/60eRR8L2La/IFbGFCao3S+MKa7dV3cAzhJzA5MHI31AXTfjs6/Uy6gMaGaqzA2idn3YUknFaM0/E0E2oTcT4K3c6JpfvrQgAbu6Uh4xIas+0l4patos9cqUJb4pnn5r6gqMMoTql08LdDdMtAly1kjYuk597aQHzlLpq6soObAIrKQo+HzuQUXvW6lopVJ5zTcC3Iz9yok1rdljdRZPrZW6VPpUmbMV3mIFIQO5rsLGdp1iVz7QRlrP3fHsbP6Qq+M8SuS418LE6HSBiLUFWpZ4Z9f1WGiArKfwvam/FaxzON/F8nR10ILa8c+UwUSeHCwQxr66xiN7A5iNpGJURZF+/BztTPAyP3SQTwbfvO8HFYaf8LF9VEkuQPQ5MvIMpc10NUHJu+6iTXkTPxZ+D7Yazi//bTZhnMukrNX3dcB9Jdkm6RW1Shx2stxxz0OpWGjbrVaJNeRM/Fn4Px5+gp+iYGzNnAR1rVDALIv3wTubWlXR3emYTJDSk73TArzgXEuhmOV7TXaif4kOsqluM/6T+LhlBZPFtdqoOVqURa6niUue1SPvt+iJE0FZSNqkGYY+4MXM8Jn6FlTCo598EbVZYKEdNeud2E98y7kzR+dmn4s6w/5GprZ4alUPGH61lXX7j1z8n7Xg8Cue5fIvCsri0OLtOuYIM3Eb0CHykNuhv9vqWhZxffRPh/h1NKvkAfDOSoJzuYTew4QPNIZbMZQaGuuf+9YV1bTZZ7OJkmifwfj6hYhJfOcisOYmhikBRQ0c6j+fX42/MDfUMmA4CggP1Nsb5HKJlv8Ycpjg+LutTQkGHVQ0yB1SbGUGFU/3PwaF2rL8VGZlAibr9ynXbu/lKrsjziQAO/jB+RtsgZmCM8FjiTCYH5l9YYdCDoT5V84KtUwVb2Hj5OOhB0tJ0qmRC/5lQOu66lKQqn4u1M8Kfiz7VvM1rbv/BI4luQtY6lSOxm1VC7+RAnxu9xafTQoVj46Qx34nn+BrNegrbb4s/B+RscRRqHP45rb99B+pahpU13RFU/u8Qb9KRRiJcpnB0WUTtldghQdRcymdAz7QQWknpl8YsimuPbpDwANA4pKh96yjrVMZrordhFmuulUK+xZOqzn+RKteAg6YD+ntM99SuLefIi2JKb+03AsWn0aRcXU7pXUZBcLmCaHn50t/5f5EgSOL27y5rHkthv7sCOxUkdFTAi2VVIabIP0Ych3NWjni+t6K8Oxr1kDV+wwlzFXbBsuLaCRwJLWrXOLsqlHKfyMbG1Xujak01IE6B1ydkrlsdgeoiV7j1qpZ9wsLofLFYjw5h0VW0gqTywMGtPALRZ7oFEhF3jVTfp3qoPCMa5j1v8BvobwylC59oVEdEKBqX5VgMgsglx+ZYHKggEkKVO3RuIUR8ptTqe9EtyGbZzwnR/aG2Ni3rEBQsVqMt3Dgi/fdRDBaaGon8tZPidBBRoSNAcdQHtWdiB7etqjV6DyKR4keJyxne7gcXQVhkRzHc77VVnEtjJZiAaRVJVKxWJg8Jgshu3NqiRf7SIuohivZAJBXg9EVnoQbuwR4TA5IwHS/DVHJn+DOoQV7jl9dGUi9SIqPQuMJn/o5JTkfBQT3c0l5sEEIZNGeAjetWReLDn4wdyRu65nhT8Wfg/I2OKHiOXHjfui+D8jY4k15Ez8WfnvRM9t5MXe9agERoJVssCRrMVTs137cZ/JKZs2CZAvmmVvlA10guXP4YQGDRnThbYmNE5h0EERIm+flLYRM/Fn4PyNH/A3heYXFX2JhxDuG6meFPxZ+D7aDmJNeRM/Fn4PyNjiTXkPp3R6vhrB8V6Rx/KZvdB4QPnA3Dz4UMhWBpC7H5+US5gnkjfI3dg9Al+qwcaFenQF4mD6CFYY6pyRRGPKm3cuJNT4d6ot8T9WPp0T+Gc+XJptlZYn9Lx/0MjigChrNKFQMRt+4bpt0YcFx2anuQRdwUl7/W05nljHfL8kOvgqi2O/Caxr4zg1tXRsG6rTBjxwRdOBBwKmLE77ZZYYQZ9vXhzFTN6TuLyPMFi3jS4vEBQce1RoiBpZEvKAttPM0rZgg9laAApGQinqpkI6lqBOqt3vgKWsBzsTMaQwf7hvgf3DrPLMYQiP4GmeAD7mJRbgORJVmigN5cxqpKDd0FH8tyRVhIQVDrF6f/WyHQ9VYT4HwvzLv6wI2TS3lAWDns9EyN61+xq0pgH5mhwboPQtHGudcolcD3EsnbvjjoncpJpYqHb6iYHngk/SMxTkHBV4pOd9rmt+vV1SXuf8Q0dXeEYnuru+Ye3XiG7JT+16tjlUvLvVaWnCPWSJ7Wm9ZFIYOAcIxfvYYO5mSvG2adKmeyFkTnkxuCr683dO3xCLih4HD7dAyR8oVJ4Wz1sxRoqPJIVoSEAaAaS7EOb0jq0bpt+QTJczQ9R3MyojED0nkg3tUjcE17TsqchGPFxVNVdJ/PgRcQUYkcRUmwc1O/RYdJZoTjebjehG6+gszdUVYIi1X75RZMojKjdKFJgI/PPeAe+Ug7sv/HpIvA1ZhPTTQULB5HZ8/Vnz2EbkJ2JIc33wE5NiTRREDaRZwwd6DZgn8sloIBHLrz2vpP7iphy1D5GMGwPX3c5cuNkd385YaLxW2aLxiEAA/9HN93oJaEZGNn2z60G0clHtOc1EHNLOtB/FSndpkduggJjYZt2FE7e5CnXnVjGf+pCWWhbXjGlqFh1bnGSMzNsPY/PDMWjAiqZpR6LFJn2gt5PQbTEP8oM2QOn44WPPNom4Lo+fm6AehXBsHs655You4bcir3RPBfndM5U9MPRrvY2XNfDmam6I31Goc9fe7UY3B5srA+bvy0W+tr1sAJVp9cw2xadv6jaKn6ZW78Or1EnONa8T4ATicNYZwBnG0CqimVcqyGier9oZD4zy4DkIoPFk1sxb8+WK08zB86ZDYRJ/520LnCJh+7O3xXMaolYMW2fFRRwkavMe/uRKQrddgyLb0UNypjQYFZJugS5WvYO3gQXISfd+pMhip8tLGGdAkFxIXtKWVSwVGLhW7qEu8GEZph35ehjgrBGQJoySw7J+XNRmEaLJ9+tfh48DA3iB27+qVQNEoB70OK/p9ZvfQZfhx5soyA1X2DBBx8WBXTVwT1TzcflNo3ZJIKwqeR7cipWQXzYNmNlgWFHdiR7Vis3BctdmHFtPJkn+xjKeUQMTqtxDYaWrpH/2dB2S/l0GsMkmmnb//Kllq3YGyhxS7+hH6S4MKUkJ04h2jqdAIvx30HGYzJgA5MQG1w2ZSem4B6WlY/zFwNVCUbEe07XH7G7kZaHAirl6+H2OwloItgECT+diNUJSW79rYbceSSQ1TdXB3rSyPsVFeIf4DE7cJ8NwWi/LFDeiI4wFww9NrrWgG0dKAN18YVYTJ1NtOt5UijVUHBjbvxZwF8Was7P56eo3G90qdpwPW2lPdIhGnPwgujQj723eNhQXfH77qJNeRM/Fn4PtoOYk2FPFIVT8XameFPxZ5G0WxUfWZrqhueCPWjG03gBhADslk+kZVPkLBAfAdV9JuL5srr3KFBuM+R+zR4An7dbRxc6Mc1K28+cNVM8lgsjS/HvaDwMsTm7dKqqCol3lrUXyUv70N39CZzvDP3QvQWifMtHdcQPVJbJcwq7a+mM3ff/5JNQHH6N8yvcWjEI2nS4rropwHHJgE2g+eNG9Il3Gb+A8DRNCQcqfK6hdMObg5BeaUhj3M3pXzVzDF4eR9dk7FjRfZSkdPOuy72xyZze+HTfg8GAXkg33mdT6Mr7foZV5XC4ImxH0MfFuPgP0qDcchsZOPI4nR3FGedFKRdeU0JwUu1FzhM+dplsiVcQ2AcsZq+WaIiztPJrlsI2JMZggpRhT5j0EGCFOEB5oNkG2B0y2IvWcmgUGpw8PltHFFwv/X31g+dkE4+VqFkrvdw0ge2TZzS9Z2nTjmbKYASfk5k6oiGWZJeI53/ILMu+c8Tcy0Ighkrwcf3q1tfXRP6VGM7j3KIb4GZAqc/QqciUc094cKcG2I75y897SlIQEZYBq+jpR+F1xhPcy7I8zUr6wjTSVvVyliNQ52sHS4J+wUhOtxcFsLFksB/rQuvWz0jNImNwH+cEcDKeRR3mYmaiWS+z9EDm0Yl6r+l8Ccf2FmgMveFTqah+A5G6mnd9h0QQZ9QJQoX/mzM9i1M7PmHRTLfAy5zsImKBXWygC04cVqqi/pHnd+Ej5M4i7AzvYYdvsHeoyY8bvcR3wzJdTy9AUrPYKDp26mi5nI5whelB45SjLqmw5pT9qFpVEmvImfizyNqDB14z1PH3+L4s/B+RscRoOM/F2pnhT8Wfg/I2OJNb5QMoh4laygiqMYiveeeUgCoh90cxFe88ldXj/1mZyB0M/J96Cyh4OTg9DrKgZI5/Hb4iI1DaPJHZhjCr+cb8BX1XlcTuw3mKAs1IkJaG8PeJNRlt9s3GfrtA417zzykASCpnlBIsMDEw4h9Ige8oIqjGIr3nnlIAqIfdHMRXD2eaab8GOd5kN2MAuxYFVhiFS2d2HXON4LlDPH9HkgYOBzhKcWbf/XULbb5ns+/ZOv8SGWnwbgL9rC9k9tbqxvm7JwERsGIBUQ+6OYivTyyUf5Ih90cxFe71FV8aK8GQ7i7/B2xhTzVeVf25j6uwYaaNux4rYzWcFnC7aE17eDHNh4Y2OCV9d2lX0m3gnhmAItBvWEJ5+uVfYLPiz8HABCN1lb46W7yAKiH3RQ4x+eWIkAVEPujmHwhieoLVyVB5LgSRscl1AjyFDmIr3nnlIAqIfdHMRXEwqvl4p7L6TDXKpjhuPxfEd3Ql5CJUU7uhLyEOH84WE18JsrutbLMnk8t1k8ziHbpBN6EZ4TrBQdRaLPO4RwzmwvvYPphmTb5SAt/UoWY6kP2tx9ldbNneqn9QTmqqeUpLFEMTitz/nE5iDo7damvggQE6EWlXWpmWXYDaj15W3gUb3Y8iVVgd/Rc1k1yiglgf7bMKij2C0LpMZQ4RLlHP0k1MztdqJfiyn2tGLcED1G7wLqug3Dir739EyGfwWzZ1Lo8BuRMTKwAIsQxFV5wecnkTVHijBHf3x3g5KxfuLEFSuOnYAAUra93xN2wHRgn84ZyUv5r8cazLmgBBokLTEtMU+67vWjncxYBwFoFDWtS+/S0EjV6PqzlMIvz1hXpt2fs2kKvkg54778jzcV9vITKEqbL6cCLyommhg1u08R9juajOpXNrhI7BYCueVJZVBQWs7NzGT377p56QT1iggwU1aM/UvHiC3Xc5bxPfeUEVRjEV7zzykAO+q5l8V3KflPtKw2UFtuJEFr4M6vgzq+DOr4M6vgyHomGSqfi7Uzwp+LPwfkbHEmvIlaSU6t69wOcJd5kN2MAwcDnCXeZCLGAYOBzhLvMhuxgGDgc4S7zHrqkjgx4V5I4G3By39xnzBoM+aREvsTr9QZJLty42xIkjfS5dNwj6/fIfVtf6o0xK//HJ0vYiRGFqvH2spTlOrwu3YY4k15Ez4NMf7TDg0GflBObo+d3INGokKfiz8H5IQ2Q9Blm57hIhfEDu12m98ezD9aAcoouTjsEe/mTdeCAac6qLoZDM/hlk2zmx7tZDm6m43s36+JNLZNuDxVM4Gk9vC2Pb0D5peA5gh+vHEEaRSWOBp3fAbJ1IahlXL1cao4DgIxjvu0D6Qew1qVy7dH6/xf73jqTlhKwOVh+iAphEsvGvru12ZG+FICnZA6PcnbQYBx8Z+P98vPvYTQ160UjhdDFHMPpAIgFuU5EQnziwWMKqqkb7Iv+kh31tyxJIhrxQRHSYDiNgdBJZJG2ZbF24ygXd7iPFGjQkW8A0z9zLolqq9uXbs3CUi3SirAg8bVAnLxjLxkBw2OtRT7qji4fIhikLlOTmLgQL0fR2yihWCz3Ls56mFTz1ud31Yf4BKzmp/1qvyy91Z7RPuiCRuN56+0VFGys4/jnryyNJ1rn8C49o2mx1zuRTsKyzetJ5w6f7U26D9h9hJW+mrh06FWJn0OKx510+h6w2SP6ebQrAUJ/Y6IE5qSwEmRk+6DmvRZ9cj6ji5jE9P/P/poUzoi4UHjXcvazOvtR/mMxwsSv61JO8CoobNx5z+KskKXYfoCEIFy7JvkWpAnDWpiaGUd9IgOcb3mMvm/yk5l4ZZeqFHPpyAh54IxbGDTi1Xsy9YGANsoKTNn5vYjev01S+mO5zkzlHjt1Jdmp3ntCP/X76T+Y8+6VxYBqOn6XhTKWHUWLf+Va5nKGK8RcyL5SWlUBXxD0zjyUHb/8KvEEUqxyzqO7tSKTAv3vhSmVuJx8/QgLIS9diFuw4x1gRoG1ujMZGtlG8fhWm5BpW4OLuJwtwlFeViuOT7n7LnyrCc43xUNx/BaJywSzdfO+tyko1+pDnTEtW3u6aCrmuM8dvax8vSLQ9XmrDZI98O1wHFmym+ogJKZ0EhuJU7zmJbVGvBX8u/aPuhw4OB2b3baL0JbD65VO/Vf43OJL0MqSW9wp/lwJXAzw6BVgkM4m7tjOgmXWlBdoYV9UwLZUVfNTiXSM2TRFDk6PewAqacNVM7dBXQ/3h+yxs37Q+YuPmA8CRXH2GOP003o4iCPb9LJsb+Q9HmjHaJnfCmnWOr0AIoBnF1o9ktbbvRSsYxE37fP3cT5dvCjC691zu63tTVQJRe4J7dPY25XWlu8sexm4BfuudtThYeGxs//HxvWXcB79N9hdHEVRxbMJUXZfcc86XIU7YrbanoaG9BtOKiGMApz2V19eges8GkJYhULRS8zfDJ4n/bY5qme3D9jFNuI2LT6m/xxkEKzJ6sEmURzVW76ZDgtvSNEZE+rCEkUDv/IYzkMgqTPqMO5IRLXm+/wDEHb9TjV7kHTNxEaoq6iN+fFFTy+1pjJavld5Jk0arPh79ZfaXUfTPwKHBavNMtmJ4WcNTZlYxZR/r50tIOfx1+dnQ5kfwUNIq8RlfpfoVrjqt+sIiYko4go8HnZXHlVzIf/0N9Xo4+hn7oAnjlFT9HUIFMuO2Mh2dlp4e8gFUFcv7e8fZ7p785f6/Lxb7vvUZvTyOGv+iYvj5R8YiNG9LfIQ39AWiuB9vu3nn0sICf8uYJCkyvHILXvDuqLotfjuOggdAh0HLyKHfOQ6XFjTsDg9l7XOWYxKkI3j6rILMy319MogimTsSy2E/AzUzvzbPmm7ZjIyR+B08Ofyh2OMvEAD4NIzjEylozPZD8mU7UsmxbOLLB85Pj4iVTfXrxAjdhWS7BRZLDCGsV955CGaiNuGFMzAiHGiCU+jCPnB5lWVe/6qEddEVwgLLQ7A6Z4qizjm1dDEBUcjO6zhEsT2Jb5Vk/n2/xZU/F2kQa0/doQjbnBlcYVEBzp9A/oZtLWCdKY1HuHvzAIUJGNlxN8NmYAUAYKm3C9i4P/ixkYMhsYrEd4OY5Aut8POYir72ccj/sKD4woT7NHyp1RC7UzwoLA5YoO1PyabTZQdKRzvHxKIvDkQM8Q303WWBd8hTBBW4VyC7Uzwp+CJXv64RG+3u+3WR8ekZgJsLtTPCn4s/B+RsbzGFdlEQB0dPTLVsvS7V5ATg1rtbLOQvvXCOBa2qtlNuXeRM/Fn4PyNBGsk8jghxjZFn68XCcOuH6JIwjZVQDHbK07di8CTSZVAr5sRmx5YLCG868E2/rEFPnDC4NglEUra7QggRJGa53b5lY5pHOGhniwmMHBVFdUUPHoRKrWXoA96468ydze9IRB23xvDQPulWNtZ1lD73zracTVViqCTgaqP8Xewg51zrDUafxG8pNuQUwcF0f4pxQIOeMNgWPthfltO/ruuslqnc5nQjpBELzb366CzMLVzoHkfLlk/5Y40M1eWlQV1V53X9uDR+fZ3RSkRfYiLIDgZ4PoZDsCEXRENxNzWDkDLQeWKkLrmoDZaO3yY59EU1R23SeHFrDYpXMGJeQPe+boXyc037S30kGP7e5duq4rXL7aZzNC7Y+OqbMl7t7afinFrU4Yb4tZuCNAsCo99Zzb07ObodRb7klWIGc74U5Hwwv5mC5GSBurgiJJMhO6TBHMxle668Ax+0lsXnjxlCYvVm2dA7vqDIHTeJN6uYEuE1X0QlDngvqKSnqxaSNR6UWOBVU2qX22b9jGRsj9OfH1k7I7eCCrDiMzfryPSYeIN9FOsdILm8tvt1v94FRCBaWGpcufSEehDigBspqri9/uZ9BjAfNgC+61MFqx7fOhQHXzwO9c7MoEEqW6VYd9stKFwKYoHyXu2JRXQKBscD7qciT3mdOXxigW35NjYaZLtkyAD5SMw9VTkTcz2Fzqz7NQTiIUeDYMckJ1jd0dywhdC/0EUFnr81GHszbO2MiSzjNwIp3j/V0hLytcwTbK/n/zcbe0yd9SBXvrrn61khDsCXPtXJk4pXKba26zPNRHwDV5fCFbAHjC3iNv343EZ3k/Q/sZbAKlU2DoET71aDBLRXE6bG4uivO1Rn4w4BdDoPZvPy0I2VyNqWGDx6QTNqhCAwioQXdyG1wTjmroHUHFhrifFhIQlBZiWhgLVHS71o7jvf2DYss1MSeQbzJz5ljEE2seHR4/iipZmYCswRH/df6Au5h3CWCt8Stvoj1rH4Y0e2+tLul4RIwUbBA2jikjvdzNX+dgDfBATPXnYqQx5WvVNQIhfXOPA0QRSmw48sFY2q6iMzoLeDnTflqlVe9GRTWccTF9PvJdk5+Hr8g6fmeTOpOGUtEvX+koDlVfqvoM9uqhwlxy+dhL2thdb+bGQz63wG4cStrwG8A6fshokKHNlzgJx83Zn0G/E4yQGLPRBYIR8+Ae8dBjaalzSbDNBqwNLq0KXC5xL2TjbTLyIxVgyKBTCYcqxw8YsHXGOqzR3wp6tz89mQnQzu6T1nf2gYbxJnBcWzV/q3spp0rOY9FjwfgbmCLEtvD3mdv0L96m8abjNUc2hruq9QWeO3fonaxEOJD5WvK68yHpdjbpzfv3Fwzinpu2Rw7vFg3iWkLjnlKy+pvGemBH+O2ctOFMlth2u8tYeKpR1BkRf479fmA79iJaS8vsRYDYKfAruG59lW4rT3dAwBpbQvhl084tp5Xjey9tzMl3TtM2TPCn4s/B+PUoBFZtb0r0XR9yZoC8MF+D8jY4k14v2eTT8WfhAixCCttviz8H5GycfvuooV6LbbfFn4PyNj7ARd/g4HOErUvZY2+yPC0jNzSpyxdsh5E20zwp+LPwfkbHEmvImff31H3wRv0eyOPDZmL6m5wZebJAC11TkU0y+Z7iTXkTPxV23+B+nkL9uBFN8eLYgRZJHY7uSqaZC5EDBfX0XbS3sZGvsR9X2xLp6W5vXOEuS5+1kI2BbnTXRyBC+4YpH223xZ+EHllL9UhS5PIXC+Pnec4S7zIbfmDEjMhuxgGDgc4S7zIbsYBg1dKn4LD5SVRZ+PxMk9tH9FVzM5FQlN/tczyiZwUtXxn/g2m5d6mNQxnlhGMmBD+oZBAVKS+3p0vOG30bHEmvGaob5ahAlnGlrAx+FxV9insJo4RM/Fn4PyM/9wkVX4twVbjHlAiE4a1AxVdN0Dp/82wztynpOQ5/SddoraL5NEyTaMDF7W5YEAAH1/h8iHFwmCb+/ndFGyHmXLn8vFSineT7ygiqMXoSXvt9ovEzzqZGm1HiUoz8tB/MS3H8V1tgVB+qhEl6MqQvzfSmD02V/tuWTUrxVPyi0DO/bOdH36pzK7IyzYACaejxrkdkIuN2XOHcIAl6xMQqC2FC1J8Q/6EY/xBnwNUfOpngN4H3BVLSN2T4PngFs4VfeIJerw47JMRwBKDtgR6TBsNNLSP4hnWtrfglPOTBzM+I1WjMSTrUSCytfZVbfoSi7xJATajPgZe6RllmH2YI/hkU4hwAaRgCv0CgDBOnB8dFEKvwaLemp+tDBXOD4tpQySWuIVSgVi2pZvcU8lG3ZbqkUsHOsFwW59gK1XN6lmO7RcCymvntM1etdHsjQgpljqDYGxF9iAvfnymAf+IPgHiCp/TDLyTkEDjys4h2rTS0vbmTf6jDiVghtp6NRwg2rgcWRhUa4Hz+hmLiOlAGy4WURgkDf9MinAy3q2jFrlmHkX1x5Wy8lvW7hNGkKFm/lGbovjUFCg72BLDHMM+/xXFpYTIZJQoO72pT0jFIaLIPp13nRLJpY9dUE12k0VbiE/IRVDCg2f3KiXJTUcdSReyHtGqrO3TwgDziNC0ngjCXQEzK2AeiAaVuNRkfajwhrklgJ/jMQsj4ukwvRlWDiQoMbi5DsenBk4hJaSK9Bmf3DA5ITbR8YyUIjS2PxV1riob1X+pd7zCFU8yWre43Jw/LOKNFeQ6K/8ZjGYoValoeW939Duar0Tgup6eGztKfgh7lJXRcj00Sz6MKY1UlXFloZM2Fj/Vo7Lka9uRpPakcI2TF3u2qnJRn+oZ/8vwFEIXfeNmky8mgV7UYvMSeLPdy72ZJoj9O9m3TeKiXrb9hlG4X7p0C7riwSY4GNQpnfm5OiEEgnmHqWNsTDFxDmd7K870pggF+uRBaUylbxEVhr1XZ3tPcePLi+TTvTycFEfg8uPy9cKbvxekqkYSgvn2fzB4aln2sgShJzY0n+Ct1N6+S8kmLeOfpkBgXq+P7aJvAQHpi4R7hFyKBm95iTxfQ1MNQZGh1uAoROfG8tKmLeHPXS+O4ZWr9F27SL7xQ/kYjLQEdo0ojvrWpfbx5LnbJAHNzAjthdNB1LKLYD7Uu44rk4sWnjXDepRjEA4udCJEh0Jgm0WWXtnCeWrbm3X9FIhrHocTHV7+zwneIX9t8r05/jnh1QpThV9Uc0ip2jI9T2ON2485VCyiLrttVwOvHwrGrlG0i8ofzTiaY0IpkJ10D88yPtT8Tk71B4cu72wBhwcLCDpzT740iNvUIfgrzAzIh+sy8uIpzIgsOgpIVdgWIzjxQu7sv+XN7rf2lsQdcc7xhjhl/oPaM1scB2R7gRb7eM9phw6/jqjCDjGlRpLowCjC+/qytpLbTYy1NPAERutpSK2LxHzpHQtYEVbHOt4rzY43tVd1cvFKr/K04Cm/OMIcIDqUrZclmTU4uwyoi5ecU9w06I7i+QChz5q+VUP4eeUjR5OPSR/73XEGxyxaufH5xoIbpYuTOIEkrcyI5JlaipCvTKM3HRRusMjh3b79W0fhk66nGVZFErQ0b0Ek9oIQrxpBdK4iNLvbuG1crux3+QoHOGosTUVjKn6PFR19678xFxSU5pOtEFvg3+rIBqEm+6sWkE9i3wsaAnBPVFPjvoOuvwl/K/6eI1c7f7W+Di93f7rO8KqunTVwPjevZnSrusarZUHHd8vjRrXPOMXaxxufTlotLDMYoRhp+FBjZ/6xufS0EMO1v1FrZNwgqJ5sx10UV3RiyC0/Bca5wof8K5A9tP8T3OVx3l2lb0NlNVJSLn+GX9HDxeibRPiak2+eKCrpg8xiylvmfzkcmecuPAFzrZ3qKg9xKsRAqTzprrxnJ3+4kC7MERmERHevmjKj3zXX8vvRKMKSVqe/6hAcJTob8CHN89ZkoIClHO7rM0yC1rkIZvwhMKbVPuBBWjtPQKGcpwAZ8ox/yoKHtCoZBqR4kJp7lKTdKrkJvzgquuFhptYHB1pGmiY+UBhxZcrYevPj8q3BFiykHn366u/61Bw+AqqogeRbvC9qzyufOJeYnPRJmn/eqGbAVxosjsW8HDem58qN7NiBBHLbbfFaUhUdIj8p8wWZ4ZaZHsP9bGbIRpQrGNvTZaNwTrRpWYEBv2p0TLPJcRFnsgaDzqGMrOACHoEcsZm4vNGgEkGkzMPJm7bUszmeiQUwVLnKyiVLj+yGAQHZryJn4rbzbR4+Dv3t6zXbWaRSLkSXSjFYnkd+KfdSFdLjs67WAjcfaL1RJryJn39zW2CG7/DKfiSNObcmvqu9pnhT8Wfg/I2OJL746dq3X/fcdZV+XgCzl3TfmlEX8CdRz404gDixtp1fh+XSbNFlDan0CH5GxxJryHYayFR5LHSgwVkdMHhW5BBdbgGfibV1wc2wAyqbAdKkmrXoNHyXxG77nEjCHv5dAK5WXCgCZ1/QziSv3YZqAMxqbJvWANf2rXN3hD3Vy27RAPpuECM+jGYVym2gaoH5nWtZq1aBq/gouA4CGhUlCCdZl2WrIALfz/80e2so9i14QxgyfF+ffL+ZuQFEm+rUCUaAiYzlcPLyL9Rm3FrKssuFMsCzIC6H8LIR5ftQfm01jtIVuS83LS9u6wRm3AiRvj+wG8HRr6tEb/BzSo8EUyiClPWMEaw5FODj/24naZbKFOFnzj14NUEXjRsW0mI/+W8clQpSrUCdgh6FDlPrnqh9m76pqy7Nvybe3JELPinLX9+GOqD18iFg36tX0pFBFcRK/Iv5T5sELAIS4EIFR2FVSWJzNbGjvMbxyiOLYRpy3NmpXVfyZVLBnb+/oFzUxHyxGZQ7GfxSXlvhGHWsGFwhtVSDrRfz23S4R8/hGA8LEfqXzJ/JVeIBBU6xkuEXhlwYYONrd0wUMiSLVXcpqEOWGqYiNhaEB8WmaPmPE1g4K0TgwfqPeFOpQG64dieQXhvhHHC/cmmRANN2XWD/ezto33ffprcUvxv/x8UIIURiU613P/0jWuNFzX9XI1HsU/QuBBgvtvb3UOWvL2jWNnOEQD2X8kfD5MonaKFDPpDwR0KUc76Gyfa3+3ulChpkuRDXaxX+lX1cgnkoJ00DaELtp2z0dzxfnaxmFjKkKU7Cr+8Z0UwH0aODvaEm1rrxktboYLDsNHn//MNrYB1ceT4T0hmkGUDmB7QkuRdQJzI1CCQpCHNbOQNeYiIQoFQ3EeIeNTI+mMYuu8sl0jU5J93TAL1ZRbaBelm63NoPq4Dpw+D3iIJJRupeXpzpc7dk+sDoQISc754zpLqT/C/elsCrab3lgHxwbWb5OmxErHGM9MKgjXsqX+ruEntCPzWuTB6qiPTkP4GK4iEcMwtMEKp1WRpbaMxCZYLybdYTwDdW0xflG14wwo4/ZQ3OLyqEZF73qzrq0jCFikJEi5wXxhIf7B6szuQQnUvrim6i0vutvOg82ic6gPrref5krI8G/tS/ScQ/wXHlEcHjxIsYIWP7oiFNRRAV3U7Qic/e2eOgw/Wd92N+g4Yt7zeJoobv5OskSkkwc01yBtR1ZtAxsoIjH8yv049zRWMvup9my7YPC1gEcDTsW82gcTCmyjJMxerN+jj7wh8Whh/fBaJfwhnTWkxfWgz4vo8VN2pFT6uW/2XOlyABA9ZTZoWXDJx+6zYr4ffSGjIKYPwK4C17qgn30jyENDOYfEeInpml6HX6ej5v0Cx5jNzKTghfttr0L5mge+oNUdvetXsd0tKpNwlVVb29zxq7oneh8v93Zqz7GmxEyebIhxdoMgYs1CJaiGpxM6wEb/YWSM7CSE/sluj7I5ysv0xBMdb77kwpGoe/7kCBJB2eWZLJkTSL1bbgd8c7VH7jhfTwNBmW22+LPwfkbHFbokKp+LtTPCn4s/B+RscVuiQqn4u1M8KmMAwcDnCXeWS8cnwHT4+WMAwcDnCWHWvFNPMoiDfjQi79j9T5sgVCVuivwxhL+Yu1M8Kfiu0vt3DJ2goHAt6fJKf22a5cjf98dERn7K7hIrAFk/cO3YHntB1iQf3+0ND/ib8HLVJVX1ybTVf7f4rPh2dU/kZnzWqjFe/OJ3P/MAiFEmvImfjQuEu8yG7GAYOBzSQqn4u1NYhuxgGDgc4S7zIbsYBg4HOEthEz8Wfg/I2OJNeRM/Fn4Mry90rrpvViv/AhyjZ/LA8zS2qvKW2+LPwfkbHEV0JEsA+dM9kTy1Cfl0BLvpZYwlIuAyhMEfQKCWZNo7zn0NuLjZew4mFuJCqfi7UzwoIENZFGn8bG6bkD+sc8w4CHrEqrflinlThrtaXQ4oghkrQRyYqI7l+3cE2aMh610J2TFTI9jU+4t0R6ZhJbTBGcRlQP8Y4lT3Jnf9S1Gk7eo08Qp5WYum/BruECz3fY7SD5jYZ2aX452J9ajQ7sWOUUSn9ptdW/5EJSkpg/MxcRM87K5+TwUyNMSzwJS7G0DbMhNjzVmq5B6nvQXJRJbQJWfyBKbND+yvSUzTmM6MGVMV/sCge9LWapsKHW54afGLOam+l181Uhrrs/rxaneVVM/Lagkw7ImfitgydF8fLd6CVmPJcktGDvE0r7qJMJcacWbNflhGW1fcXAL1nXB/rluMq491nvWGn1wDiQlhSVW61SjreNyoMSq0oGoFv4vbblPlhKvlrK0alE/8HhFoXaDGwVSdvGNJzPH5UBzj6IcZss5AEJDrpgiJpkUDJUQOeCQghvKi5+LP7MpuQuEg7UXteSxcJBztStE82/6l/49T8CBbWPB6Odk15Ez8Wfg+vZ9vDBprxlsBwOOvtCTPA9NRwkZLH1VEJ9zr1IqbjbErBV8iZfFtEoYIohEz8Wfg/I2KlkXsqt0EHErsSrp3Q4mfiz8H5GxxEFXB64Zk0aST9fFR9yiMKdtt8Wfg/I2OIrUgLr5gQJGXYGNbxYyBgXdVGHMZ54zVz2dwLuOJkKQLppW8hIcp+LPwfkbHEmvImkaAwdru5LbbfFn4PyNfd6B22lPzSpyxgGDgc4S7zIbsYBdIAAP72B6Iek4T2KFDXnh2HEUPMXGTZaJu61hsE2ZbCl2FTndwzUUHNB0xdPAA301WekB9IRpW+bQzOazN/pn9M/pn9M/pn9M/pn9M/lQZ40Frs9Fyvi9OsVSJ7/JNFhZJnhhJOfqNmSOVeIaeEfoyxWNX4pwT7wBNTa40uq9tr8SnVSZLyUFrUNc3xrM2MG9cT+kTo3jhddzWhsL+ASJTPx0ovHsYjkee4N5S5agNeZXlZwRZYRYEnQe9i0oMGOI1SCFxFKjAtQKwwO2DHosyo9WI7rWZHZvtVq/99q1v9hsW8+FN8jkGq6Y5RAhNprtI9rrvpwGqbvaxVZtNJRiV9J2Y/9MRHi9BSKfHZSzAB26TQdXm6UUaO8TZNbmBNP0k9OKuH4xv/wNEfZfUoRJZuZUzR028rW1ZxehElKkwV0nGm+EFG99m7JHI4XatdaBnmWyV465ooSd/n7MjP1BVr7pM4K4sBt3NoDmGudfRRb6W3Mvwps1LEvNbZ4QiUK2q4bZ+cLNGY4bRLrpdqNbfoWF8QhQz7yW4Rn2iGOGMgbCwrzKgaIDxvTLN5fCCGTKQcknqCZyBnXuYNEIYKqCHcB8ykv6FwAAAGYpHVc3ivtjw4F+cUYSmkwdWBI/AgUFnPvrDu1BinXgxYVILWxHy9HrQ/+44F8INbHkoaW7ROQrI8pn4AahSybvxzQLupf4iIBnJ5kZmGeki2pJBL9kaSdv7nQdzr/2MRSActgbwxjjfAMEe7CE/Xaa1S/O/0dPKyox0+WCMWyIjSOGPjyQ6g4YZM2knxrIrt9vg7utabFAC9BdVk+PYIYG7geIvAQKs7gsrZhs2ln66lWZ4uz0LcaNCZ949fQSQGZjq2cnYopK0vOR+4aNHqbBSMFUzKUhL+jXPPQRdKq79RuffTvCRgG57efUYiHRDQDl3H1CbQAlZCd8S9bfce012+eHVBDPnwpyruY20pFIsRNDXkOUMwOOjvZfMu7WvwNYw5zDtvWUl2KBGnfwHgBLN+mfUMzuh9cJLroAlsVVZMKPs380qdFwdPHfv6gkVV6BQdt1PmNWosWprsfed+lh9sirCIaPDCUBPXjlYaB1Qd17rGqlPrJgHUHny4AqtBz5pPX2yLh6v9Zqhybiobw3PMVtDfWxPWz3VnVrbX+12DgLRGr9bAP/HbiGvefCPjYWn2U+v7O0kCuQ+Ohe13+QuPNUE6QOflxwUELnDYI2U3OS5CPrU4txGC7lDxnY4RS6EQlP+oviF0lCfbeemtepziOavTGtJSnjLu8sTs1G+pHwvsDk7TeMLLJond8JnCojtHthOswWM3WXjE1eP7myWfHhZQjeHdT41iUpNfEtslgm2BOLiODzCUCeVjXNogO5rZ/SqpDIOAJyBKGblexOTmdvtw3oZZSzgDamUfdzDHDtlh1/PXHstx/bNJl8Hayzma0uGhejgz44+61aLGNyBDrbkLbsFP/5WXYteFsKYNPZtfrfYIf/htU20C8jjVKJE1Yp0R9beH/vkOSYpB8113lA0rPTw8WFD5ilm6iiez8HpoBOoxpC0cEf8RVKt0HyEuquFRRBAeeYXy2C/jzeSqTQjgvKARq4sFjt26eLLKm83a/08rwolfzSnTDBvp9HOZ6uU3zoT+npn4tL60uaKV3tXGXCV1orAskbSWlNQpvoF4mEaQ5kEirEWmq7ZqWME2mdSGt5/eCGK/I0897q/8zAPq4qWDnCBFJr/SAIqsqR/QYoMHAx1sdwKV9tPPweQ1wEYDoLCz+RX4cc9tl8yvdfw2UjLqh4KRzMG08j9SI+IuvUVvRGy90Vb7rJMRM43IsNfnd8ASxfEBlNrL1SoIjwobP2JJZAPpeiM6PYIgwTPp+w8uoK90iZ8MztyRijDayCbZboDuMlWHMsz8KxWSWShLkIFoCmlBej9TWmjXOkOb8dj01G9cCRj6b9EDV1bGu60pZZP5sSZz3Mmxxbi4NRxc8i9h+CgNHGevILOfRUcRIYUCSE04eBS4dkmZMCE1T9YDla0Y/Q9tea2pyKG9lPg5g+NUlToY+RXdWJVKET3C5yurv4PSlbog5anr5xYhufaVhdLbW7+ReSIvKp40GUKlyjB3HM8wyNPCZc+9wTKeDLusU8HqNUPddzMkKpzFllfr4Bj4HxeFsvEmEVPJC6/gY2St0XFTUVlrU+vXyqLL4JNP9fLhturbqjDnw93G91FsJRzrUfH6f9FeXQWTK5PbB0fxTEfFfTBWlXJWuOFcnsgQNo1Ms0WGOYZ52b8VfRkFlE/9fJpkh4yuAGmfTVfefgx2qo2g+p1lJTqmxjnibFcAGzQ5bE8IyNz+cTfTJtzgzhEPJ6xJp1FDjqtZrX+X0T4Brt+0cln1IzWK+jrArINw2C5kW33G/Jw64gBqCWkCqiJtgvGS89hFfEQYVpPzP3Ud4zvu2ADh5GZo0UP8KJdhcFhLttLntwHRnHH5v1djWANOjO+2NXtFafCi+qi3VagGF/11SIV9hxOs44hf2wuCb9PNko9K4/gteMMXt3T6uNTQaGWxhGOsdYnlRx3A7kMi3MoQSB5nRg1BBLP5hIWhGDBgWnHYTaZZG+ucE4ccoWrhRa7OZI6uTruwkiicHhsTUB1FtAm7DhuvvvK3NGOgbCRmaF8xRkumXd68VYc0i8NmLBRpIbeJieOmQhhR5VeFKGUMA5rmv+q+jKiTP0uyIZv74G2GYVyq7EbmYIjTJqy0ZfPgsviGwSOOmvA9sLaaQgMpQYHo/FP8qMX4C44Mldv/KOqN5COTG4kj7Z20vr8DKdukjE1M8GIS6muvZ1fLwFdGp2rbhB1jiwDdF9UZOYf5/BHWdDHlTC72lqJAfHYbVEDkJffJVl/wjmxyyi22c+QGTS1cXGojOFLHB15TizNt5WyG2iL1hSrUI5CqAMXNbL+zowdM0X4qGwtnSZAO/GLIeSvgsnmXGXJ227DBLiqFmY6WB1ohl95t96dCfoTPgOow7CtFcG1sv2EogdW4enN61ZgqxqWc9PgimT4jw0np4R3oW/SmpSI7aZsFWYzEhmcbHRVBDgpbTZyhTTAzprV2wMLA5+EBn3Kox9zxNttfw7gQEvL/PAVJTTmeCiC3ZrF6mXXyUh21S3hHzzL64Vjdb3cfx5ar/6KpJAi84JCXr87O9Zrtb2S9U65roTtRhd32tBaNjEBxZXKefjsiDuLGDBcD0qIczsOHr4JhsxRgORJPVFrbpruDNJfYCuRro5zdoWoBJd3j4Lx4ho06wmoo65JjzX94POqAI1vNiVMpn9EzlbihynlJFLNUiCR8+OkAtHYgRWt8K3BHS98f/1d1tklj3TO+IlZQAV5E9MehCKxzyVxovEZ2QE/YlBqJhdOz3m12fTZn8WrqqecDnGLaFF9crLSQArI8dSizeNNM7Gom/YGXBC/qzL5VajKaz1p22bVTgyCV+nHFLUyoNGR0Du98cnmQVE+PNo7O0OFfGs97wJK6x3iGfbGmsvd14PHFv2BeBLERUU+qraHY4K2wVmndzKnP6Jju4IRjdFA++npMD0EcrEJTW7H1Ec/Vw8md3KMqJvAXy6ZrvduTmw6C5Er/0hYnTyCq5yqKp9exGllKH3KSLOPeyzt2KdtmTfA2DAL0V+kwjCj7sv+LHgD56d4vBmATP42OisXJPm3e8GYhBmgk4XvXA+edTNc+phvYFhUIfh+DZEU8qNMQ9Ud5FQatTRbvPZZw5PHatmCgwtdorRJhQhg8IewTQE3uvs0raCtq+GAxb3vmANx70PKGLZ4QDUZmiWzWkSdpUhhdA3eDbxY7ECGZPPkO0gRhpkouNmYzJtMFA0yL75Zszzyo2+RoZE97sr1vM1/k9Is/ykHZ4jNKMkf9lyEkFII6ctsofVQKhpNzWZwo7LR0GYDKsbbsHDnxGy/zjgk2JtjJy8rEde2bu9LgAAYwGAC++vlTO0EQAPdAo+4YTGo+QtGEqff3TQaORc1jgtTo5UYQoOaREbcaLD50va9FmRCjheBw2NSASM6gPfOOZd6LMzI2pt1SiZ/sSYpk6mnLVMAF14g2WAFrONobG0UV9lJHpWVxP2YmZMyG24qYYW5rR1QR0vn7teRMpCKupDWdj3PrDpFURFNjsru03zMSg26IQ4bltF8gRnszgRXy6FIWl+Y7cx13EAVEuiZtvLd7FrqHN+DDy+PhghDEqV+FVrlmvz9JugaXqQLSv/gUOG5WhYtOhyAM9iii+AdxVRwlXZ8d15iQQddzwarX0BFRRSqXO91cF4c4t/Iz8dyw850M4fVauZqhREg3IRRM9Coc0wsQqryGbttRo6QuKplxTaU0GI8WfkO6Tr8Go3+AQj3NCm+m2kx7umlLvf4aE3Mva9c5XZrBneKwSMz5qGcUEVO19MHle9DDQ4LXVc4zYZilHTK9OA/tByA1Ubq+Shbkgy3cem1Llme0WDiJVViVMYJubEOrDhVToYrzV+5AdffcLjevC+8jZC1BaIK4gWFYev9v9149jeBcv4km2KQYU1FPwvkD3AoQHHioJwKbNtX3ZB+TJZY+G9LOq86/InIpZEY5tlSPlJCWF6VVzm/Vaa99eFTEoRh+MTLKWyWPCpUhFGfj02+W2hkSXHLBP0kNNfOwQYqYC7+/WRb7oFFNhy1OrY9Q1V0CEYW993gxX9g3Pmc7wkjHHBrKGMybuZFKjGnzZIeWLTR/KoYg0ky1YXquGCBUWl+7liUfxXCiqSM3SfI8QOZxIdaNw125rp79wI0F5ncCTv+i8jWEBN4/NcqlMqY8mcRR5rLpfpEzi3Sp6aqQyzCkqyCC/mJs+NVwxJCmfr1l9fVJED6YvqPwwFxeAMp3jdC4IIWFoSHnnPboX6A/EVWrhMfO0qPGAZQ3x6j+zywaYEAQ1k99DEYpx5yGFHScH1nvzmw+PDSF4aUv4pmjgquTRhu5azJrZAVZFCUPMUpg7pysBSzz98XIsY7wu6WVYRg+FWhKHpY2jXR0kM6uQEqsjA11HeY0Tc+QI+FTOc44y39WudTLDS9C8VMz4WypgotV/519Sc/3WUWk9wtdGSpkbV/Uzt2wWzmufcx5xegHTFqi/PazxFHvkjd6XYOqt0FZZFXXtGeU2hFByg4DN/Udr/fBG/qkVaIugq2oMpFzxseIIRg1ISobVztANnG9hN0DnUgd5H2qNQT0CEyQymIzC6TWeX08N2qTsJCjBCjjK/PO2ZAUO2iAspZRuDmqYh74wkh8DnaWRmPHEHe2zK8wjtv0x2LjCPYYBh3KOGsTIr6vgUWftnGY6aezl5y8cJr2Sz12QCgGizfmfaoy2dfjlXasLFpAwg8ZP+ZsSP91Qt6i4t3Hi08ZSzfVoGGHnul3ApkTTz9eiH/kH2DGCyuUNIms7/RiILtvzVmNeiI0XlKmkRaut8UJ0a5B7LYKvYczmxY/0lgD0wj6t/0eVotMoiXBMoo22LJbEphsAckOoHva9cGJSeb1Jer+ugiEWtZOlGCdBQEE6u4BDSLe/YwaABGXtutiHtdAETOkjq9kqm7glp/LhImh+QBGYIKBgVn1BLog5aaY/quTvE84/6DrA1pMxkNFpFDPQ3YRrSX2WcnEjBIS5VD4FFPLfD+M3fY1LML6fI9870N2STT0aJ1oxohA2mOLPKMVMxyhs5M8/GoVVcYzYU0jUOlZmYVcrGA1Z8jjL4rrEBl9dOkAodhtzlMT03/Yp0GsfMNCxLsMChLSBomFZ1OzwoGqUTBvpWPqio34wb02CZBOHo+IoSeo5QpSqHi5+o+KYTZcXCIun70Ot+j3Wff9yrTHNCAF20S6mq66lRW/dYj6h/4kEaKtuFS26oFcoWhMPoE9Mjv4yDlj90T4Bg2of6jCNTR9t7cLrCIJPytFNi7BivNiKpeS0iqwpA9duwalW5ul7YZsSJJacrN2o03ssjcNRgHcZ7XMZuQweK4qbpvG40NemSZ1/uCyj5OsEkxHVIh1dCW8XCsokTBapWLyLdCJqOYf68QEgwg6mj8j6HyWclCPQdpsclsVTiiDyMB5psQweZwtZW3NeS8ABa30vH9yDep8PQEs26RNk8TUePFawecHEgp8CpoZzz/tlK8B7F3sUgnaOJn/BDTPnVjoE8RD94kbk4a1zvKy17AHaAhJ8HuorhvuwxcxUVs99+beP/+vugHriQV/sxAX33hlCP/n3guxeikeuKj//04l67g9Swblcy2lvaVSQqxgf2C4GClTop9eYfKl6vJb1BrInivN2OB6KHYLPj/WwvjqJ8+Pr5mlktsmKDrXuqlVDOiV3RR6P1Qaru9nDDw6eJzTwre7l0tF+jJM0vrcVwov4O12nhAgZPwhkViVt2sH1/dDM2RZWsFe7kP7uV6FI9cFFmmJ86RDXWd1TR7OgzG6y/gUqjCKRvpjC5lU1EDf8/B++gVDK6QmuaNLWCnMcBzYJbcANB5TihDzt9vLVvKk7oWmMR5HA86DBhZQRQ6JOnbOtELc/MbRRcVaJYkrcpzBoDemaXsCuIwBzm7FhL7uJVmzMlQxEc/RrZkDn0gLRy0/SjdKpIKe/UC9XYrSJ+jQm/IKsjFPhokoyoxU/1SYYrSJS/H2+d/M94KW+52/o9dmlyiQZMVr/oUSCWAaSRAc4M/6/T90sbsF46gIixLt1VQQTQQmCUnCHGsv49mQB33s1lSdjjfqFm4Pc8iu0pVJ3fN/SxzXO3Juw5LsY/ODy0u1hmtPc6OAYAWVshF0ZOUJnpSjsNuMOXBvT7tmYktRjQs5fGaZiJrlP1NB89azhjrp37suuFOSeQsBM8Guov/nEQ+u4WZ/wzB/A6K3FEHvQAXx0qcZDBzNitSy2Np+NX2DMa9s2879c0jg9Q1jTWPDgcW6ZJxkHMXPugh+mwQTSIVRI8wMdFeYBbQ+OvzXHauFqN3xAep9ID96mD3v15ZXax2WFUPkZ6SIGUbl5coxbvNGc2PAe5c3+vq4m8dmEfPr8B/cLhYZHOW2eKL2+jPh1TwEX3Afv93lF98/K8UQZ/1+lL/GDEahhEiYnQ3+bBb5/ihiipvPd5MeO3gpFyzNqLSn7K8SxGC+SNcUsr10CHIou0wE+OZOvyB70PCvI+9RdDm8Eq0cMSWrAi3zjSyIbsLln10ABKh0I84TlYd0AALqCMwejxn5bD403OI7POelsA47QacB3QrU67ejEplI9/G1wekQJW774J1xSENcVXA26SIvHxQSIWsIv7wkQbQPzmlet1RXZXTOgAJPabXJkYLJenrW8Q/5gDemrgCQRYn5x/JDMcbOyO7UbUkRPJAtgrK2iRfQg+TivSUb9szOwuSbzxuUaTVMr77lCUAz5G4j9xs1sakUtAqLfcfM5td/HX/ZAJfAi9Y9sB/Jk6kYL2ZaOGXw89+4uK5fCp2VI3/ZkeSImwzn2KmBdivZZbNpfeNmFnyv1Mx2cH9cXGbU/zI4eWjSLnEAjZ9oinRpq3Ib4XoVyrt+IU/X1zqTXP3r8Q7/ybZ22y8LLy5Nmt2bosJx9FTmDffVMKM6nXlxokP8b9Pv11hZHOENEgdj8DJmXnb+uU9lOztyL6iexXp79uQw5c9q2f1ZTPzcGUkXchrOM974N94kj1f0uGF49RcZ8N/KtclsX4Gtz5idrn41xDSB3h+Tv0qfIyxveGVsDw8Hnt+lP3WeBpIXK8DUarD2eUfEDuWtIGwGB6tp/gFyPUf5n1498+XBV/E43/XDulXMad/00GEhABGcqfnQSX/jFVd3DgI1g+oJm90lUS4vJ8NawFiy+7px/fSs70gGImFLfyPbRL0E3eTuUXR3Uu3xu5LTv0aWP3PRxQ/y4U+0xIeJsvwtZIcqX4q61E6eJuQ2Lhf89GCBUjajKh0K+P7jLpcMMpbGEpFR3lsbkmQvOgnz5M8zOwuAhP4LCiADAn3CaLysenqPF9lcw27DpO9rGu3paXwAl+s1ZA+6q6sQXJLVQ2BCDfKqnkiHw1d/faEAlxnI+507eKHcMg358UJeL4nl4ZhO7hAyvXhER3lNppEvhvfcJAh6gP+nd4ADxMXMs/A/mVSmZ6SNHp5dFbp58n+DGag5KqdVugaMUwKrwY/5ihzRDHOAyP004/eBh/LHoeuaf4URHMvxZvTFC9njyFUXbw/CJk3mlAedMoBDFIzM3Pm1KQwEFoq/q3gDgIlmMORTVfzMDpBVEyMjWGiGg/RNrsMhWAY72wEjuPYwjW+GqvXB/J5y4cXomIFehsMwMhMmEV8sVB1zfK+cWN6340gnY2mbh6kOxgT1MtIljxtGUE4tDrWRr05n/8XJpCVadYJaNFYMe08ZA85vLBo/SRmjxZNrhfhYI5fx8WB5YKwd9feOD2NACud/pXib1cdL60dn7AOl0KpRjIMJmfE9+fMU+A78jX0/HIwhmuM/4Su5YV5nX8442vFeO3W6SOEUgHQoroACcLXCFrihELB3zT5anmUvYVDzZVCReZQgLP37WzUTQTGYPSc1EuoaPj98o/0WtUcBKkJGSlo1ErkE/d6al2Rege1x7Did+e29xdeTZY7gEDggfR0tn6oNW03dF1Aaauv6j8U9i1HP+84zWlyMAMzMiwlg61abMrBh0lZqauufpAiaeOyFF0BFGhXc0kizcNjTGpqA84QSP00+K/fdCXqMcmrIlC4sA8fkpuEtWmXePFGMMTM2OKDMxzAYJWJ+iNPw+WF6r6iUgXn35ZdjwjknZTf/gf8oCQ+6NyAooqbygKmDYhibu4gKyb79TK3SzEGmKsC4814ds+r9ou+eIYzaoN44PexTVlGT5xFda+sUIXTpM+b1dpsWx8FodsQ34XpFX+k2mjsVoJ1KNtuzt8qzyPaYtGCFpbsshEX4D0O3FqCCCZurTqSioIiPRWrvUnRGGvl7l4PxmceZ5TYq3Wv/v0upLE69vHYSNCDVAL0Pp6zWmxTy20tuyYvftOx0uwnOQwK4yOBAAFxDIOuKXL16cQYVTjxtUmGIbv85r0Lr6/b/v4U3H0rNKOe4c4MNvSNZpM+aG2x4OSft2W0vxhntsyvA1ajdLbCW/IO+J1xyWDIfnNlZSWLkw9NIHGPwFr82Mzg02lGI49tr/TLkGGJUpa8jOCN5YNosTmzVngk/DQ2uJCDnNOQkkpH7a4jWOgNOxbBDIsUeyh/dTkPiaz2rFOj6pkn9tM87H/CPBv6BJy2srI1ooQZ7YlZ3D/kzu2fO7bQ+9gF3BYyR94xc3oOpO+pND/vCnOPlCwuKPMcIZQSyFLuNcjJV9PbkeAEopw6NVtcrLt1xvIHGALZ1A55hDNYOMKNArwSLOZfI1p/9LIsAnHJCVCmjIIq7UdcqrQ/kH0Tt8jP2il8ATCc4J/DZ0WrnEN/2aIHFTdfkP++oS277Vq3jsshms9PRJQU3NN62fhbe6o5MBmxL8bgG1EtZcryyo5iQdIb6flhr7Dj9z9ytm+t3OiFoam1OS2APSp6j8s0Wp94VIQVEtLUQXe/X6G8A79Fg5Pv2BLO+xHXIxrjJEdopG0qzW3AKytVMM7pvv6AH74TmDMjHL4dhvwGYCHpufNbHNdiVHJbB+W+3uepI7Zb3pBJ/onOA8qZgMK26Pn9EM4TuWXVQGGtXVRhhHYz2gUdXALpfAQccrn2eyllmfAV2MNhC05WQIkAzF9ao0gXgxVOnzL1onxUbMBfTSHZJQ8KlalGAr42EY/AfawbZzZT7Itx72ZA0jRuZywSD+L4pLgraxC7I1Lt7G4iDtqzmd4/7c8Cje+Q9oyz5JBILl7pLhUXW127U9TdyBAmzk+IaWVY79F+7aNegkToKaFWuHx1XxZJZRGXFpnF+qdJMh9Fb0EVqfCLbvHfa5SxBFQ9vkxvuKpJrdenIMDVTyULd+HWVWB/bRnzzCbmZlwn4IxMowXkLidZOfdv484tAvnc5LsdD+hSkOw2rkhfvlX6SkkFaKP9G+o1c6hapLZMNIvmFw4luEFmmG3uXtMwnh9L0IRln1ZrV4uR5rBa20q6NOHbuFb76BTLo0Soq0Oh7xFhRhVuSZgBs0sL9oVuA8BHXIchJSlla8QcX+sVTnlYlfZSTBauDF/gzia5tf3FCbUQOKJ3OSkE+9ityeryZhfpsD+vEZw1HwGqSlLoaEz+JMgjkcdHGtGxYKFsChZw/XDqP4EO/dM7hvOiQEjHrHQgqPPmNo+3wUhXFDxg4TA8XC4CTxgPbnabC9xBAJPxP4C2M1l0En4j7hVJNmu30yyfVyBw1USXn6cD3kGgXwSob8nCHTWIAawcgJpV/XrUDyYond0YqeX9X449p3Vur/10Wcf8sSR5laxtpqbfwUjp59D9WAs9s//tMQeDYWC035j1Of1S88r5kUElQkkhaMePl1fM0EpYVbptzZVM8K1pVZGTlYC5LAWv3to7P90Rh421/oCvCvmQMYqcGp8H9Rfpec5lQnRckB6juRfjWfKrTMhVrV9DQKWsE8ah7XVv2xMm668B1cgLm8zX9q4FtrxzsEaOCOCBOOppagaK6E9p+YaGvwAAgM369U1uvKK0xyneB6GkjhFq8PGIAABWZr525gJ+nlY769uZq+iJvh2HxkCjcSdSvQqA4FF8gFRXIZxcR22Ecv3/vdnBUT2ulmn3F30ishSi7ZeNS15Btd27BnTJNXHaVPoOLccoVA2B6MTqztORh/IEQ92ybrFzgJS4W28aIOyMM2bdWjTXT3M/6lhQ8jdjPQ7RWUJBAm6OOLv988BBCMClpJQ3mYceyB+0O0crCWQbIQcGZM/iICmwNhVNErNr35i+m7fBlYo3BwT7Kfd7Bx4R4AGHxIl0ISR2BlHdSjZmWc0erTrVjoYMORPmoAAAGe9pD3oyac35IWBuT9C+G08AJBVZzYgYBvz56MT79RwGOKKaTMY7HsVq+U5S+AKtRafFMLw+eoEGmU4ttj0l4EeqEkJSvmNcXNw87ZdApkJ8eIkFXICQEdTcahYlZodXS5hkiaYSN4R72bRCIamJh+no9JpD/+UC6+0z/kSHv0LlHOYyOH/GRLfH+MKa6wUYuOiuuT2NuAMsktsZjiXlfNI314paz0vsHacVUfGokV40wA04hDa9kcfqg1O8XKlxlZqAgmj+kVGasBy1OGUPJ3OG+PDk0lSLnQx9Ka92HFaCirvm8k+vcRtb62I4VGtvVY4+LpIxefnJYUQlW8mSeiDgYJBKFn6KxinpwsS+rTqfeAB9ET1hiADN97veg4fbKVA92xgBmIi/XtXsfaD+BmABBsRvj4Cx+f+1oXrYn4NvyLsyxoGAQi9BoeOiwQPOa7uQnPWewZTTAmc98o3Gbl8XwBdQZ9OFgmUH2SBjTGxG1wfySNJzQKyrkFod+DTDd7J/Vn4EKiXrICdnzlPweth6XVFvr/vlkkJYlbZWUoM4CgykSc9AIu3hs8tNHrPBg00qI38HKOzikMLosrRLJ1y4Iortyb/i2ZGX4QIHSZia0q2FSIA3emCN0Aih24U71Od7ETAilcQeM9j9o8tAXcbjg1WesP0mjLzZCjsYJBcA7esiTgyGaCwjNV3w6FZK4cBBYs3xQz21i0Cqb2IBHz0I2rTOypj/Il4za+o6j6Tig1EtYJ9r1ofvG0wJbftIEq54zgTfLd2vDEhmqXOCLwLWsmUoLqGS9s4b/ltiqRGrzmK4YO6G8IAEojSLKRzkUB5Ypy4FbesJc5ObhWrcZLkXfVvmR0UuYxiTDuFocbnahDnSespj/QlSQbPXTESRGLHrO90NTPgblvMs2dG9SRygYHjZKVK//Yo0kJk6Tb8MnnQUc9Xe7xPrlSG/Fx5NeloKPActwDjUSQpT0xAFaVuq1bN9aBLRezpcckLWPy5uUcY3CbtRbisZqM51WvgrnIhH12nADA4M8GI/JXFzo1KsGoaXvoy1F+DbN/R1gOwP7mQ1pQ9vDsLw9N4YdOT95qbNboZHbzkmD7/R/s6SsRScrVjfkusRYqrMD1KcXV3CxYBERfwJ7rFSAOyqLGiuHudExO/QsuucB2bKf60rL03yY8uMo1luB3tWn5jUu+OlXIkczZH546YwMvRTrLNUL5Et2iLqo2pqk9nPIizkPNG5yZ+MG//7PVIXM4s88umDMMUaOwvgn/qwWVBOyaN2LnIyOYmgG6MWjeGEKzZUDc02OGy8cGW8cuf20WH1jCmcDdw4yBB/PA2iS9Is7UC6BHgeuxxj3+D63IGNTiHeX+eW3KGMBor32jT4Akuywteah1lK9e0UwHsm+WxgrfMEZ6kEOVEVm51oOtaarNiwbwbtQ5Piw1BTKKsqS6EZKL8CLrkr329z8jiWe5kt5YCAYh3JOvCKtBZAPVHnT+18QYE9IDdAPWi18vP8NsJyI2BlNLizOnS7vZYmTWcTtqywRqpv0BvQxpCEqSepNFPNnkiRO9zpGWabcu7pZkjB+AKY0H91fcx0T+5UkMFwCwS2WUkdGQUYkoTQzgBp0m26DlSZHrX0FzVoPsLaotEBBupalzvFvIhkgPGg7o8Z6zplWLyJuMDyTaQxji9Yd78WoFDm3wpaVNmuJfDGQPn/SwSfQ0CqRFzEaOHN26Sfo1VsOJ0+6gZdG/RYMCT1rGf1NoBxl4iNqmoZh/kZDRtbFTuw3NjvtWu30FMHQmNIJ56oXK/wJ9cvW1r0ntE7WQcrG34KVucdye4BIBJrTo5MiOWQap6U+AtjsEEHFs1WnfNuanjyVzEHeCVqmb3MXyo3qw4cIxj6nZpWpwxXdhSC/KwjA1o7jg9D5Rcr0AXQPPXe7bo7hYrp9QPFQwk0SrUv/o3fRGqtcBVSTgiBRC9FsRYdCgoK+CDACFROzjpX/S9+ZqJQGj7hmhv9pFpP+FFtmfU/Zd7eXvFwwZZkcOZ2qFYW3mPRt8i1HOGjGyIj8phMbc/yM/i53hASr5V+Yva2ExFZ/8dcCug4octkXBvGwY5ckxGq6VXW3OjtdHMvwIqdcgM3fi2xVbm1DHt/ZIjHpu8wrg8qRcCykkTJB+4dA8tXjTN2YCoC5qUHdI7UTI6WXMWvnO00QwVvPJi/Bu6p/y+CWAJ5XUBpMvabcoADRq1u9BoLNbxC3FaK/Q1S7W5GedZ8ZxgUraNKBgR8VQE/KUk3Zw2M42Inz0kIL39rhoho8huaeGuI2Edh+E7yv2AEFCs8jEEKNc/Tr48Wd2C+gbNNkLw7O0C3OVioxxK4Alq+oCvyeEnEJauW772Z0ag7XqIL2xRM2TIgKouGZct99MwUnbNvcUDvSSXm42nVkaR7lUknSpAmBrdLOoNElX5N3Vv/sqbH7kv6mRgGaQ34/m0BxftYm0m4rK0b0q0e96FCaEgr04elra25gO/UfbHCFVwu9pjnd+ThRAqXL1bCpzeL1Z2ySX9RcXMWCUeps7gm2DeK1UlAIW/MtFIzZpHZ7hcBFwp2v7jNVwFj8MQ9Wzl43cfFWsfTXf4xb2AlhKKSqFT6ZYq0L5Ie+C/KAypIc71HaxZwluGw3Gbtyhn1Dj3KFopl1CqoicVeP1PM6ohIMs1MRDLnu1qIzAd84WlDPq5I2iWhI+1ybMLoSEpYlzn1eDu2TQ4ajHGkzjoErhDq14CUgC7PTi5/3mzEzFK1NqX8pbVSDFSVXbNRGeH8/wrP4EcnlYY3AwYcYzrvUOBBSJUZEzEsKrhN+SsO2CkErGfxJX2s80IVlTSE2Ug9Aws/lLzy2+yKszzBYrx5d3Ls05Rn87vpknoyUwOtjO1G5o8LbwhBHW9o1ghBv24Jpc7O7aaRFVFt7plqLCTpsvu3sPlCWNCIsQAB4HuPO4PjLsKjsV8/FtKRJQCk3co6gESSyrrf0eVSZ2hVjy64iPjVTFIRwiJOEicmS7/MJf7v+zKGmkOVfWvG9JK+txnzsNu7ljnxIiTQ//Oxwp5tp87F9f4sNxpxggXPmjUYg+8AIiQWS6IgAslUIfrc3vgHO0L554b6oOBM61enkeYGjJxw2RBVCFQuLiQC7qat/8CwZBdHF7BS4SHauLcZ5WL+gceXlQg5R0VoHfGScrt9nq5ddeKo5EJ0Fv7ufuGZomzhY3T1ddN9LuBntjCZHZOs2DkiRZeLUlTQJzyDNUZaU27dpYkFgyYsb8OKA/f/Xa+ebKxPSPUlfr+cSt+EUHPl/1Nog3NV1clLzC1zW1p7RBqtoFo1/MvhrS+fVLjnGJ48q4VvAuUJw/9uDAh9OdAzQC8JIURbSeoIAtQQYlG9euHaUd/X7ZtSTZLuLSjDbumFe/rydCryVWlbbykIkwXji4AlDc8X2FvxbY+QHKJkevNqw2C1tok8rgFeeJjK2EWzihXAMxl5iV9MuzArRWbR2vbNToU43/L8l2SfCDR0LngeQq6IJaEploU1Zh7xv0unJBWmeaPwScs9limU08qPgx7VtXPuzHOuHiZUJdvcqkuKSdljDjgH0X6X+Tklikc8tDu/dPexWmu2fQNPpAu2HrHArlrq2TZUOf6Xt1NFpHD0xFmef9VxN2hkWD9SwcNKBX5SnQP6pIZFliC/7XoC9Nz+w8KP2DqK+oDmL5C+JOjtvzmfXwrt5eAW00rxOWKvjNNjyhHin7HdFa8tZ3FCLGFyihjZxWlXamWah2+yI0v7tnzRpPfuI95661IxgDtgAsNbxQ2+ReeHGOpolbt05YPWK76qtZRe+WHQj+/OPafmGbndwg1eze7qb+5sb0lEJofktSV1FfJNFfeNnrKyH9ujVo1E8e+njT1+mmK7As7WJECV9WcSQ0REL0VSiRWPyLlYq0ddhluY+L86dhwcfSK6XRO8qudCbwAFaPOWsgH8jQzlDfJ149o7IkeH0BKmggkwbCcNSDq+wxLumjGxwgV7kJC7cJtU8GFcA7rPyOljms2JB7sEZGiKuNqyB5Fxgunci0DnHsEm/8XwbJxRtTVraBRs0Bh3cmeIZRBJt1CD6R4A1CiZ6odPXRHXHvd4I0OeLSPhmpdzdwi0FfhihV+Ruu2lzVYQqAVh1gN5/4oR8/ggTuj5zC2Zqw3BhWBlmtd5DpNUhRWf3weI/1qQ0MeSV0vOLUaSVZDt/fztdChsk5LAZ0x2uzl/bW7/2u55hEhHaQfTLPcSMJyV0LLMbd3NrLwUaMaXr1TwPqxmDHF9JADZ4v/qV4prvYCAS5W96ibFzhUN7G6FpPAVg3yi9J3LJjQmVkwx4EHA+M6GBcHxB/u1/LQODGLNuo2nCMqwiDpTjuledoHEhtN+qnU/vCwSygFyrSmTtcbrGhNSvukPCat2c8S68qDUaV0O7NfClTmdwcTdhxaFy3EZ9kTSHrXcoAsYNhXYQh/Uh+pSgHWFrmXff4jJurHb/FckqWwEQmOohJT63Hqm+z331d+ONB1V8ZzGtbuj1Xb2FegkJ24sFEYFPHgEKKzhJK7qt6aJGZhS9UVI/PJ6oo6i4hwfKyC/Uyxy5Mvt4/fRhhoFoUzC77eSgz11PGYJdDe7iiB6NAAKbgsUxtShOkBXdgYJvWJMmQeTQ4pwzcI4X0DUDs0Il3lPieHQBDv8G3YqULz9XB+MndHmmCRQ4ExHmiX/AcJ7P2ukcsUYLqpL6Ijziguop72h2HfdwQH7iTr7kMUY4pOMWovs7a2Z7zANFmkp9ueVdnFqFmIxCrGZJsMq4TcmX4nCAh1kI08SvGKvCIE3w5pXuAz9v1wkdXLRBBPGRkO+vqBNgaD9dHkFAe47FtgxlUcNEVYutppTiFcL4CX+dKJEk6xIRlTxXp6wrBCoRtkDPCXwYpp+Q28sf9XDC/OtcZfGgSXetU35p7b0m5QaX/xW+7QDDvy8okzSzJL3Gfrmo7RlMWamJZL4y+2Gu0KGFS491SoG28+dNL6YPrvqrX51Ywg28zIzlJkE+fXnB9x1NcumaUPaOwrJAF+2Rf0P9bAwutfSTliflXHL3QP9JYANrlfNI3unz2ALQC/Qu21c3B06XBcALFGYIUPOZBJX6tcs1Yjo+mKU6utkr4+prO7fO7vIS1cvbDaY3/ba6hzfNIMmpHnU+DjLW40yjIzzHyNnGE7BkhqgxNZfC967XTU6PZRUMPNWq0tbndu5SYLZRkNdpQYehU3LL30thbVytNnK3djshwUEuz1EeM/UJSG8oEFbcwMK0XrcRShD5a4U/GIjoTVpgp3MrVlgoGBl7WNzRYmKbdDHu1iS3UcI/EwmmDQzG54NKNzIz61oSeW0SZqRhk5TafnBVtomRiRb086BQo8vPOc1nPmVHjvfBtWtL8FTtTgBReYdv5zUPCBnwWd4V29uzw5+9LlAsegBKqYgMFvfis835Pend5SeJvkATh1TQ07Zb8CZNKnHr6I8FkGo/0hOjiPIwSb3PjZdlj3Lxcjx7/QB5X54d0wDa+dOzRtxdvmCliMIVsDp1rg509xiEDx9LCMEjB9viQps5A925q+yHI6CG52FzogO5IFGjt+IAsVq2xPomGIJI2Ju+Cihdy4L6bVC2eagAGDWz2asWZtCKZziI0YG4LKUTkclLzVr+eaNTmjeVD0EcWfsce/aVwZdGAYYWQEscUMRHmcNHNe+uCEZMAiFoabbPBHZvl55ozGWnzb0XK7NE7m6cuAvW1lpClfyLTQR/jiTg4JONi8ZA6m4DrHJWoho1S4NS4RWPxMqr41nB/nkygfJWTgME87UqvkY8H9Sdk2p+87GEG4M6ZKAFMxb0AGG1ovpDV9K0kXUnuJtc2UATc5v3HkfpIGWJ7/3Zc+HT5P3RPThGsVR1+fP1jLutMOXV/B2gq8D07FYPYtEzly0kvGKWokI4o7JiSQTfj97ZeuGOeqFnB62Ijh9o0VVijfG3v69K+a29PCXWQnvYFfH9uPXGUFV8BH+oSJ1KMX/v6bCtRlJWAzVc857BJFNXHCbwPex9JfdCdGBpi7cOFwt9qsptNWnyAEdgEGDQK4H8mcfgBhCrpsEw5nYnM6pXrqZovbZ6Ohb8AMeXHkNYJiMmAIGzABgUz+tVtlLrPgKNOpFAec2wOKlmSoympl9X4tijjghyTdnvCIbP8Ow7ZdS5tMBALeBDPNSu1nRphTRzRHftvkUN5dqBBPS5Sc0SJXZ/6M2HpkusbYeq7IrfndtxDlhZvtLnm2I2mWyPtm6Afn/h/Q/jCj1o8HWzIH16lpXq+o1QuvQUmSMFZC+20H48qAiaydgJO7Mwrpjdd1PnS8FQrmSa8TP9GCISD2hYu8liSiNAXVVvel12Q+/QHj2RMYVc9KEtsLQO/OpbMr7/b+WmQ1YO0LA5I4+v09FT1dJkh0OZrUtyiu2YtySJwmmit2mN7L9lBpoxGlgrzp4hOXGPOa4Ej4g0l9M/rcJPIhNbQx/IKpzJyVEDdIOIeFTuN+2O6Lkimamu6E+8P2qz8VyHN4gteJxUUZ1cG0Yjd/VhhY2mwoLox5jNQJbnxy66Lz6iKr8I022EAuv+c+ZGumH6abhrz1l15CgxzBoFdFyQHuevm6YPqZpcvkhcRXVyRMd83gnRVus27eoJWvsrimQPNDdzqLPaY4M3L7NaHpYamP+jr0BuU0dPM3Vb+L4ld6pHKyV6Lrt9gK9CGlSiLgAJ4/diI6WkQV9jDZ5zSY/rtXuFpVlE5KkfPht1mAjDqa2RDQM8H65Ts+HNzd2xxKxvug+Q3PD9LQ/RZtSmc6mNRVZMpwn2RGhXhGqiy2sYDDT0t/9ZOWKLF6XuA6MZJEB2tSqFThDv4zMYPwQzOEkqdym8SYA4Nu3+u5f3Rr4B/A7P/8dcrADxmZF+xZyRR1ZDAllo41Z8oqixsrxJWYz4cBXM3+2wmctlYg8QnkQlSV//gevcG73TIIr+l8cLBySlVhDVvWwgzOSAN0ADX5crUlmaIUxUBGROSZV7339g5A0V8SRl4T7dpoVGLIegguMPSCkiGrk0cM/rC7RADtlHHDsDNNVUJISVITr4BoUEJpUU5PPAkaf7pr00AEt4dNZOn4/GlT6FI6/sR8GSsYkVHKq5Ecw8ISGkljca8u4bZUY1J+oSBi/c7jdon5O3i+4limKAeS7vY0N54TuZBAZW1p0646X+A7+I0WzuQxa62Z69I9C14YlsEij7L6ZWWVtuAAG1sIjdsDPj461LDUSUnN4qQGQ0v44jIjUgSESmLw5rzXVVwIdKOcaAq7z4WihGuiImLlXUzbLjlhvXzbA3kKIIGDXCFZUSWsg9nZKJ3Rzv76K/RJuTNzcCCsYg2Nrat41/q3AqufmPTHk4Z7IFSoiqETswKJgUnXgHWbsMF3wjiFd9hsQJL+kStiuIRFibIQYG0nzPjGnzXKHHpGYlLSGk1tWnCVz5CYglEd02kCoDuFP1TQLlbRVvAql45yBrss+8CRjtVYAW1oMcYzCtSUeKzJvkJf+UZO0q5+RecGda0UOpu0v4s327qp5jlZq0HE2nIdScuLxKwbbueqyWN/P515jl+EqZbujb/O+2My0hQPB3DUyvGhDivb9ZIP1K9kVwUfkyc7Y00H576JABtSDDFlPZTDNrVSkTEjqLIkTYlBtAb+bM+AENpGbfvYwKJBN+uqkYbu3R2mC7zimhiqrIkouMNHIECLwi4bBHNl57RoSHwG++btyUjNysHlNGvyhb7Kb9keqWBr2FWCrDa4SyleKDRjcpq4xcvgCkn4HHEQIjMaRFuJiSp/YuPEOH6J7Z0hspnvoid/of/V9TiBN4ajnTD9hDkAZCJxCH8QtMjexmgB60Ynh0QnlBa0xSPZkZfdnbLY0jewkQbNc48jmVnyhVkyE7gdo8WKN4ke5U1zCqbT+hgD4CgLvMgOyeH1lRGUMJrkedxGJUM2B5Svbr5B1HEKsTfURP7UC9mYOb4Q5G5g2tyQJV7mrTyaVSfXJKXfwgH8gu0B/1h3QQYBNXR77+VI8ueoyLjnPWFEFn30DB8JEb5erelOa5RKut0rW9t19JQbpQ2EqCV7NRWv1DypRuyIH23fh6M6HburcYPCgAFUStiwDgbgRgfl36f4IIvvMiePaHjUKwo/dFRRqsRGbLLl+baiiUWdy40qdQTngSNfXqpDoZ2orrbTzdcHRBBmpxdbHX60WoBuCmTy3BVtz1twYUGaHG0/NOCst0nwOyw/k1kZBIwDy2RF2oTC1mN0VoCXK7JJwxkqTZHD8G38y3XoCZTJ5URoiRuc0VcjXDs+UcipHbJ6aej1g3VqNArDx83CsvxjflWTTaRoWDGDafobKoX2sLLZxJ8rDZgAdCwzC//QNvj4+RfjXqLFgwfp1N+0FeY3z+MWjD/2WSN8XJ6zFhOyynrgtXuq0/MoiJGKL7r9dIBmjV4KG5ToAAdW20xSuV2rAlvzd6XlX/WN5Kbd8mf0Askf9eEjG7b/RL795X/8Cih/MB7kIodQreHZb0k88RYI3CBoLDP25GDJbWA/s05d3ykpR7QfFahd3AxVeHWsXiUgdTeMLPKONDL0IW6btxrkPcoQjD6kr7xy7TX42H/UF5Z/21appUZSg5IXOOeQ1XFQsZbSNqQWV8EsexeG0oHOFB6Uqe9y5R4VTjalF/JKF+EiqQuwknGEyJ66Osj87KnXkaPc7hucafyEc4loZ4z/KUJ9AEIB2YfcCoREyCYLfhfmmcBm9Xm39xmJBrOJr9uFJz4+c/uA3dfUK6Pg5bfg3okzFu8oGqX+thDxt+eIztz3rw0QfOvlT/7nJrWHQEXqLassQKjfxiyM8N6ePbPiRiLX08S9mrbHEKRl0xaqf9Pz9rcEck2PznpfactdQBvvbsv1L7Sn0Me1186y9+EwMxSPVMyGWUIEaDgva3LXn5xgmWBf3MKB8fbWgxiNo5DVMAlH6IlITokg2gGPxvaEK3g6V0ZQ3bqnDw5i2kPVID/NeBpiZmPzYmoPNEdYrSJwZrOwpR+I4cVHiWg3tDnkdeyx/xKjBu+QII5cRwVxM8LidUiW4rUqM0ZkLzjlOlfB8Nls4kCOospWlm4LH5q7CCITq7aK8+NSzUbhf6LgAM3sO6XNnaOOa3JdYeeRZeWt/pt1YUgEPWNLGy1gBtP1BLHNhi8igDxO2KoQzGYhrxKRy7dnqjv00uLhlXHDVLwvzMDZP/TC4y9dOpyX82rwydCKmIp2/QxvQKNsjVM08kzX3H0xFNEo3SYeKNQVtXx7/rlMnzaairVkgwZSbv3gjTsAcfBamHSxufJ9hPvw2XlBW66/99Fi+QPVOvbeHQtotboQnxRPw0tIPwnmq+ei3pMLsZdHTLxVMWAh455CsUD6qLHXIDj7uYoiK6F1TP8d+/WXVPKRTqRM4BbNHiLvRTxO8WNNagmfy4B2dT+6BMoS4W95GPECvGLMT0oZ8ObnxGSDvl0aG+VuratsBervIp8U+W170Tlj+PlX/EDwf53/pK2HykiJ/jdMN2MlyWLG4Zo+cDzrykmHCddkom7WShQSKOIaH3ZteULzU/T3XSWjZjV09WiUj5fUH41UYa9XmjDYugpp5/A5WT+kF/HZJGK/aMH5a7MkkmXFJlPqvD3NkdDMXnMPN94VIxn7mRakE+MWQPFjyl2NyFDlrK0a1sQLCcvxn8LoUftITgPj4516aw4KmK0+pttjsBMCN4JHuZ30b4vwSLh9dyOnk7O6SA8Qdp/F4asN93Nr1r7HBnNd58rs3NlVpeiN3IJiRVfnf+JCRwJGGbm5N4MXwOECFE8jB+OQeOd0cmkC0kmTY/MOnDIUMYPbnJ1iLPq7NrDxU9TN2ZsRqZtDDQHdspL+91BtEhj5TGTiGGZarl351AUv0lShwC85SwhIOlNu/9IIkMspepZkT0aPjjPm8DCPXEJ2Rgar3f9G/eJKOgX8Xm0GIh0xvAl/x0blkbsro/1HGHmsAEb3PoD76k6hQ4j+lsif+R3jbpiKilX/3MjnYB7zv9kO/WRtFD+lS9bEJTes2HfRiKEFpIaMfOsd6424Ua1RubEyrQgsxBaKivoL79hzfoM6KIPKO1C+NnyQzB3nJbaqQj0hotXEg+eKgoUYnFczi/CZUg9mzo/ooq3GzYWpJqwjiO76+NTLDppwgYM7911ST6eGc5WZQapU2EIYJpqnhgAYif9mMQHfOVJ+vhfHnpUtsWCCysQwLyqPqk68Y/pZbDP9bkiJnVmnKPp4xOyy3GRrVgOgAWIhoMqoejkxO4jpWOd9IlPdx9OQZ4JW3uWvRBM74VaEAxGC0R2GyuxzxXCGwNgAsgVS1eqsBRrQ/sVnfb5+RgjZEABsLdk5AtzGfbq6Moim0xi/yQoU1O3uuRFqzldDUP9RsAm1TvgBgcQgs3TQr4VTg1Rsv57ain1VWwZjKs3jlxDlKzc1KLRM/a2egDEs/NxYCA9ydDTIQjPJi8etXxAM84wlyPes3op3geJ/+xjfK1ITI2+8XVoPPnFNJpG4cTDj1UHk44h5kPzLcB4i1wp23ajjaoGeM1Iust3D2uCGKqLN0du92A3+M13wdxCw9UQ35fVibgvePlT+u59IRmNd8LCnUNv1dK5PTl8DfNeAWn7OKxieW06nWYJji8qXd4dSThtUlIie7i7CxwbREf68OAdCaDpxOLpKYf8AtSmY6E0upWp7TARt8csHXNhCjHiaDWYD27W4WAH1LkGbpXSpGpryxerQQ2KNXoycKZIun8yPHEuAHjErkZRQpx2xplJ4EE0NZO/kCjvvnHINyNc89vKHzvo03mCTtdsCyYzxKENj/TBICY9iAFeFWi1zvkvo9R2jHDdMuy2mCCg7m4Hhzdv8MFBmtLVqfzOCjU0hIZ/Exq9Ueb4IJFGKKCN1rhcEF9p4yEf845Ljmc/Z+o9iVuNTGbVencGjpL4mCKzkN/JMh4/kpnT8F49hS3WNgEHBrHt9Opneg7a9ODKVNep7PUR5+hQXH+nqkqmj10bNXRbEqJeFIz+oJ6ghW9h5q8hSiGrV3cLugzlGkewYW8FetPnHVQCdb+w1ZmQ5u6WscetV/k4DXgTqVFW93oZdy+grS81zkssnqmo5QosDOe9i+w4KaeBrjN6HJharSRHDVRG25NooI71AByoElc2pPAhvOWZGHC248PTGkJ8RvXVGCClSWUfb8baUpT3pHd7jW+W/G2lKSIBIqJB72YBvy3BTKLSk3+VOc+/geINk4N2O6TudTDs+aRefKso3Zc1qg3FNoLrjIoOqu3GZjot5l0fsdLJjzjozycfMXYNZms/LnB7fY3WiLGrpO13Jows9PNAwrGu0/PDyrvaw+Vg9PHF3+Sw7OeJUC6UkN3ca4tFkP7MQ3KnCjPsa5XLpdvF5LJqB8+9tPNRfLx6gcPnrDRfR57WZjxwcRTyYIUwbOncoPGkpH3J690eepQWWXLyVDNDLHKwtxR/AC5X+tHE9q4MRrActfe3lSCmfkuwJN1A726iEa89Q4AbIhhX8zKTL2Qi+8vfxqSMllBoHeFahW9mDhQJi6LCavj5xCgjXqq4UAG4NqK10z4WfaZJAwjH9KOKQFILpnNqpK2Aj66KT9Ypm1bLbIC6841OEDfHEpowiunOMEHJdWx7WveMEZkzzRqxlxnRtACdgBcq8uGkJAmB2Su4zZ87rROMo7sNfw1yGJKLqUffMLQ113/K+Xkss0M2cjvtME2NDflmrEdOowxyIuSnoYnx3R+43cnvXuudluTF8mCvfuoN0G3yqnXBZwd1O8ZzXG84CaXI1o4mCQveU0PL97GdNJK7jbepKiVDGpy1zRiSqYipYUQL7o5dK3HfScN0vT3J05lnpz3pRX5znv8yQSniprX3HK29JPGUI+sdjO0M+mdfFaJ4VbZoJ/l3z4zeSo2QdhOEWUcUw7+hsWMOvTXRNewXHfjgjVMGAZu8iiO2ZiHvUooHasBIMwEBT8lKEMv86Gk4OTMUiDQRYxQC3LLbqfEtaYbQ+GAxhtkqid+tOBhHCfIJxCNabgpkxVCzdyOa7EznkX03kjr0LmsnYWxo/93JwswnMgMd44+KKMcCjKfy7RUJWXjqo0TGdDKbxy+gIEaWVxyX75nCzlAbfyZON1FxlDO/j3kX77OkiB7C3RxeEjaMImanOe/zJLrrJ73A/trAwLvyZd29KVkDJDlyhehqQ8/a8q9B66/hHMn588a23xxHeWRY2VRj0LmFDhgbWyyOqjl4CbjXri95BXxHtHPDHYYUkX31hEeataJ8+JCrcrufH4levTJwXsndFtJP1nIAoKkY81IqiM2mxZA2O5tV+IkfSkgn4ZdHbQQbSkvC/MIcOKObzTb+VFjC0mdpel0AFSdr7XqYDhjq0YROM0tyObJWO4yGbqUABaPF6GyRuOAaovGz3q/jz6P7ZRHyEhWBeptadWxsT1MSNdSKq7kmp8YPot4ngccP5s3D9jjglLBzVVr28izcz6QETjMxR7jcBtl0ix77Iy8V4+Ct0nnddKS1gFoTBMY5OegkZufdovWtRu625RKk3wjZgifFJGIhX7gv4rHs4FZQqUvnVau/h1Vo8NrdI3n5O/ZmB0Dp9/UQ0KM8RiSdRdCwgsYYWkIohrN87BXTic9gWCjkbszVNzYc4nMnKKNsZPQVi8xyvxAJNfvrT9wYAWcpABUiV0aDAQHnevmD+mFD2Q/Kh32lFODylJ0wAulJtMERLXXjGPZVAb8KYm38RFJ+gywQstra2k/+5+JPukUB4GOvGiHCUuGz2FgCPlcQz7KqZaEeEymjIUvbMCNfA65UHFFVI+XDRzdtFyZg3sQM5ca4UZOthzKqdJuBy3Waa5PdDZraP6u68pf1VQ7X2jTu9ePyOve1mUTwHchle22GCWYhaS2CpO/T7IUBsOYPlH6yX3TnqhWcysPfFQcagpxdyfbdS2bWfYt3QnV1pDq7JTRLwgan9Df3eqC79c1BVhzNiZKm526Bt1OFNpP9yGIKU6Fu7sjchT76Moqusi9A+7z4uwBnPEUkqX6OTVCVS2RLefrKUkxjZwvOYRZzGnWZ3i7sJ+rWz/sNVzXtKvdM51pnf1CNsQsZ6ACnoqtTm1Lu+Yo78C5vB3Ev/CtQimJVQqTKOFB00iZI0OEfcv/yYSLC73snxlWh++s3gN5fyZVQHGFtStB6PPQyDhJfEhShilSl9rPmLSMrw8wrbnX5xglCH0d4Vmc8vlBaWPYUru8y4a1wR5+dUneFT4lgqbp+O5qlbUsmHaKp8ovXostZEIoz1mTeLwFWTKzvML8hRDL7NiUevGnoP4WMw9zPAFaL3ifrYFKBB4TVqfBY/5T/cmhghlI+Av7DjQxEmXNHIoYQGJEehJGD9GmzlHh1Q5wz0tCs5PVs6ovsXCgwYoMDooJxTNF4TPOVD91tMOqZfdI75jbIbg+kR3VcZDYvPTLTx7cXTBW93t94jB/712l3lj1ZVmXgNXg5Bf5+BvBlt25XEhkCPc7+KpicxhHKD5xxT++Mw+6UcX9XX6iMRsrJ9J0u2tD1QBORRInYl3RZ8WoH76TycuztRS5v0BZi80Jh+TfJz3Xna9jOv9QaV1wcWUe5/e398J1KYeD7De5flvDztmZdO/ZKrE5PM/sBzYSu4AIDK27StbIT7VAs3RWo2NzQ+ntsT+t0yDD44f99TR23wsHjRd52/+DuMa8AGGCLYqZW8igkjRTF03F0UpGb+4gYBmHkjMKoP+Bpqx7x73SGuwHOOo33ecc2vHtcRUkCBZ+5FbYXC0mKATwVLtGLthe0A1aaRbYNsXOeebMFSpMN0xAXWSaZ8XGaiyIYafX6/+Qtrq8PO4wUWZRBC01zEbLb5jeyBERc6sc7hQbetxwOhSr0VmrvEbFEGqSsFnZPxrBSAqcFYL1josjM64Qr6hY0+xqJdElegV1lBYddX8jB4SD2YsRSnA8yR4AU1ht54Av/TncxkQ5N1QwyO7ZHfdhHSwE88mnnyGGypsWkkOEwquiJxMbfI2wy+8RvogkbnCWVpSweX+n4W2NyNQ34F7FLNiKodg+lFCIZ7dLLzGY71Bq3Gs3eweFR8aijZC/cCLX9I7lwLIn+HIjaXUyHQSf0YvvtrC27O6RLSmx9/05KvVyvUxbA8qTDSlj+Opy4P+VRl5u5LuJIUWZzw41FHAu5DlruDudGlhmV4TL41UjxYYH0RvThx47zbCK0XN+ZRTAlm16q1HWIYUMmBYfZgcaWypHpOa0PJbxZLv+bOdvjFd58eAML0jw4ILDECiKUuYspjWTrSkunCTDsJsp6BgSSG44nNRKPFM5Hp7o90JT6Cq8TFeAQl/68+p2lneZC5VI+cItyLeIeDxx7EPnIwjNU0xapdBeG+mZRBrWpU7oE2yxbMFG5uJ8jVDqbGb8QEUrS9nGqhAaeVbgEP/Qk1hTuIKsBXQzl+XTZWD4P4lNDoQkuAY8w3SJEOQkNSLY1yuMtQje1yN3uAxgjd8nBeWHeMuuShV45hGqeNs+oCmIwxalkFQGy+lcJ4aJBspUSBI4esrhM7sYWT7SdQLUFaTbjWLWloAAFxLEAoIw4lykfqNNWgA1Dyjc2DP5ZLi5dociZ61kqB/MGGigRtr85spfy2mUJQyvUkAtQKTCBvfX2NJvI3dUfHfEgZU8C4/YF5z2errzQGta9/a8ya9oqt+4eos4P9U8YJ3ag/QVB4BL2RIjHXJKsK5AIsU5C+fgdg3OsjGLCU1PtjMRqsO7FQnMJqMQtQWR3DKiPMuVH+8jgow52q9XgUaA3nvvqT5K22gkBeFpFWAgetZ9E+dgAmqA2xxfw8DnMCi29VLkpD86JVbWaSgvW9efRw7iElKU5lhCJss69mqtdpuK1+H0qVjG5AWTeKiQcQ2gFFTkwxb1ZPNzhAKwXyeD5p5oPfGBh4JHBcpX/D18BRkCFfCfFyr9EJKk5piwc21vdpcwz0EIl2yODNCfqZaPchwKYD3v4jDd1JbCG3J8iwbAcvDxd9rdce+PnhUEZRcZSHIo4fHWSPAp71/MuIuTZIWfX3bLhQFiUt1Z/wev5hG//3EAB/rxEGTFRBA2BIr+nkgcGDS1v29dgBgCuRtxwr7DAnzqtj5dlvuOIGSiGVVy1YIL2X6bHiOy52OXQBqsPUq69w21bmfjy4PEAfSO+H1orBjtvF8KWOWCg26tP6RrNAcXNY1/RrX4nTrHwBl6rEFPR88kLCk/hb7DORN4HBAIaWm8v4MJxRRFopZkYcXeImD7K8TQiBz9LwmyukMZjTtK6I/NZz5MWOZ7RyxQsophxWYFCQiOyk9txEiVdWjIHeid+qS/KbvJKXsSBZthmeERmHGzIR4eC/2F5J3MxIC9CiVy4DQx/rOncpoPKsqEkQNFZG3lUXdZ0odlKqqKlYxa1liPTek1xEPKN3n1eotzbYmxnzt/fIbUZfWFMUGt6r4Aeet5V3gt+Da3vXv8juhWzPUFKE7n1MdJ4/wD0ju1/Wi8SHjnmOur58dSjV3WhDjW0JjERle66VDLC403ck2RbIDcHhL/Zj9I56ah63xy41fDYy0Q5cqQ/bRy2/Qmjp+MtdlOCHesqA64hb/4HSzy0Cjr12m2yls7aolaPjXTvwvJ6NLqGGz3/d6GFaxPQUh0RcGx8fpRt94vUPxh39xL2pFeVcYwyAMUd2mwTwq30oSZwS6nJUdwtc7tjBeGPXkYZXMAm2lnaLRghZIuA205+rL+Aa0GQACUP/x5cSMpTuumPyfkWJu0o20tyztnDZHbE+LRaKR59TZiZODhEHhDYTloU0sqHbPS6V5xoUiKC59zTxya0PvlFERO3eCWi/J/omhOTzxfm7ezpVT7MnjDWM6BYoqB7IpvoF5znJGZ/t9OnV+rO8hG2G/mDXdRnSlq9YZk2vecex5dXK1DcFNrIZ+hJWOeM4gAjGlb1NC/3KwBEb3KaHjiUMPD0zc6vaHnJ5PEGnJfuwrCFf7E+MnCo9OcxPwY8oMM0cFBlWDlN42JAp4yg/q3r+izXknIaGxJHWznggn532CAih0hhYIeOBoRXTA0vw47kmRPCxi8ITK9LbtJjH6FZSVH5UOgL8vVv3BoWkNENj48anYdGX7WCu3V/O16hLF4Uoyl4OCXKK6jD9YdUplueTgz3hR1diTwXAGuEK6oEhB1K4e0q8R5MPhMi33rE+b9DSFwPmWQYNe2IqeINPCczErXr+n1fZrcUKN76rno63nw6CcDuWs0aO9xK75x8SO7Sw4ZoAsQk3RZF7WtLGyZRbknsjaPxy2W2nMfXTaUvFXCdWjg8XT6d/fkf9zWApKVNNfzym6An09dNfMAypF/c+YjsEY1G9dtgMtclfruaGWfchTs48jYxWnr/dI4EgIGApd8jFH4KqD1WOUR3pzvKrrF7lUQRvyL1WyyrHLEE+te/maB9Yq1UQCU6DdadzfDpK5PWMWddNujwOY4/ZkYCfrWumK5RIhJBYllvs9lwUf+9ITl4UEIw2AnlWqtcN11RGJU7v/ZfP74TIl4h5PJjyjZB7v+XTkNYcX5Jf/R7WiWg9TvAQeAe4/SpG5QvgZdkxH0VDL7eHRtm3sPccPkdsBql3+mEjVdhztsBiSn6b3AqCX0+v1PwC05XeN+l+MErjjxlCCZ5+Z19uf3QMBtiKLiiz9OSmbpebnCu9iUgA3Gt68X6IQYCODQawjFEvB2LvXU6yoDFpn1zC1Ba6/FLmwM/VBTTiisFqrnImG8BZz4Z6NVV/7mrCoUzHPkxAuCrQmeP8NEdk3YTXdJgb/IaLKaBQfxEUp4wJjCGA1magPssPinhHPDW4ytpGSdN0MPehrlI1O085M2hcO/xuaMrak807oSsb16oWFqo4YfKA4hcEspHyjOi3SYSTpIg9Mp6fJwSPC8UA9M2+fp/9QARRbglGrAJyvRF++qlQq5+SGquuaHm2M7aFOL1mvv6tbwMWQACgbVMQM4i905i5jWNi9tKYZe3ZvIPdYnzX3Ee/bd10GIcSc438dkZo/zXWANc9M5fDmeTDyV0f5VitlF8fqbY+ACCRpbCwhLruVXA3Exfn/zhul20fg9IZisPRAb9oAMf6XqfFaIrCFLWl2WUQ/v6jVopaY2B7A1StCc9xF3dZvXFS0g5hM3VqWI25dV3oW8k0La8Z1S8IFC6zpIxBP0HD+KxXEzFL7r5Ecu9U7TfwpDTmJ31sMdoE23d1cPSQ82Lh/8F3TVCa7x1obr6QvajWycNS5RHb+a3JqzmTYBmDB16PX9D7Nsrp70jdHyp8laa9UeMy0tHpXrLQzIcsure+VHw1CnuKLGAFPQ+qnc5Rffdoppc5xn47eTFvtQq6CamDUMbs0gmJL1LA9f5e+ONstMw+j8jLQkRRNR43RVqU1pL9OFR0vhBQ2e6Fxk5ZNm38H914u6WfjDkf9pZVtjoPUjn+/GLJsyDHp4o8LsvsHIS9zpIrXcTWM8rtQTuO/YEOohVEnZzC7Ibf1+hgr72k3Z2oWRwrj4z2671nixjGXFF3yoa96Ul1TdTV2USQ/BVb8FSdisggB/lHOKQurlbcvck03mx5N0ae6J7wu09EjePy0QFw4JyPkjlHdqpEMWXep+p1WwvvD7rrUS/QkpfdkcJ29C7U/0zZVUAWkzQ2zidw2KX/VJH1TYcGLgfJDROhPuYhMsuhr/08PRsfF7Z0ezabwrrwksUazzrFCVFuuFDKIlP7TD5ZMo/kzOMvOaOwte+kH+skfPctbHIvgVgZ6NcerHqnltkzQAYRjyx+6LANbvOg03t7GFX4fC54XACwziQJOpK9Ys72avkQ3IpciqFx9IAYxVmvGPun1DNYQv/g2qKUt9FObjNJElik5aUYEZxzCLp0ztb3zIUsgDNgG9O0T66caiaZggBS9AGTYaigrM9SNc9UTPEUrN5ZsEh1M33ruX/D9mkEEo/IFoMRfhktq0WDUYR8qhNwsiPilYxEEnVgqRm6EE17bHl4lRN0N4rKjTv8wG4S2NyCsvALZWwTPZuYCtw+L9CdK/E6F2DfAgT3j7qmB3xnjtI3sWhUq9oGXrn8W2vaBe7Kym1ICL+M+zrM1nwb6ljicWy4A4Z7pjePNmIIrwHtFbFxtiSDe9H+qaSPIiyW/dt2HrFDRhOlC7CqsdQw/JUa7nxJ6ufTFOUdi55HY4g6wCWTM4936HlrmkOKLCbNKJcDPcX/CpPpizQKDrlpgAKnJCqZw3TBOxRyo3yL4UOkqMRo0Sr0WB0jJ/THagrXwj3Gjn+ZuGMn9EYFfGoSg/ZZaqJ9RxkjD53ra/FUDYDa++wwMZ/0+21jS5qAbDHu9LuSxPl2Irf+KuhrWL266D+DRZ/HAjZpa8TXFrl02tblE2BtXa2H8n1Fjydu3BhII6lcuaobp/FvkdoHdHa5a/wgj/RFdhLDCFxkqKz0SJ5/r1u5xuMI9uUyWW0VEq3QMEU+GxPLltW1ip4Q5tJOfTi3oZ70NlNlYTVI3scGKltY6t3W2YFne9c7f2shEaYw4pAH9DXIryJ7dYhJcEUnakSaxSyZcp3G7uxDqer7F45vHbbQARf8rw8uAJFaJUb9rbUFIe1iviyZL/63/HMFAKw1Hj5DBGBNVoV253LYTMWdrofv4V0IHBl6pY1a3cObdUXquzXCsevaVexCZhn4s6lE61kiFj2b2p3W3IiDOtmqMdOwrbOgQXFNBBYc3o3U0Wpfp9RyD/hP1yM84dPSEcEDZ/u+EOxYC6qPVOS2M2apw+q43w6uwElCzTIxdlxHP3hF39W5KQgWovQjr5l/pILn9NRaTrF+6EKPtm2dlAhJ5+wN8yGWt3a+FbyIltmQRDSclwMMTaHh24tBP6s9rg9+AfU3wHCZv3Vs+W0ycNTTiXmi6klbuOYbTaXZtvK8v8A+4gsmWMYAVZxMc5P/5T7jwpxmCEDFOaPAAlRqjbfWYBGjVcb/o81XSSxe4W7pnFwznwlLR4HLnLv/ciqWvc4071gQxWbzm7XyYhNz+nZN/QFz6vaWto2pGpbb1A0Hq2ilt0sBcO+BXRpTMj/1ybqKYglSeDmjBSrduJUihcnX2VNyPVBA7c8DNmkisRkfVI5QTL95Kf2VIg09w880roqsD4JLo9CzwgtONok9ugFNqonr8M0SHjogD1H30mYc0kM2IRL5oWydoDu0kUk+qxxF2PwNPylL97f0alJPXfsujmW3h9hqM2lPTUPmkzv80PJdIpJGZ9CNbauu9OQcGA6NvLpQ+l7KvVix2I4zJPmnCFTITiRmyo4mrqh9O7YQTCYW19F4Lh67J4TmocknhpJAQ5IbmXKZ6+1SZBsnvFkqlK5f3PrwE47tquGswD8T3TLLYNEbdRpaRMSDHbW8EfWM3Dcr3MqDUUFbhI5IGyhWA1F55m1w4UGw4ElO8knFDT9lZ0u5kjF6D1zRz3p7zDayrPZPHw8n7y3EJOTh+Tb/ODDqf+5yJoLSNOGn+ojASowhpdqJ6PFa+xLr3ZChnzKE4UJeqiQk2xo+B5Di+GO78LXQt/EmgP/PPUyMMAbU6nzWuXhj4U23MinAvR3XWLGkiwn/PTtn5kOOWeL94y3DJcgBPZ5hALYGC17bq2OO3SD7HiIAnB3rlH2FoU3uZpMfMnIfoq0XahJf5AUrVldYtx2fmlTB4ESNQLYgMPRfMApr+krUrgMkfHRZ9LVgvL3zH3X+la1nT3QNmvawwSwizcmH1cBJzb4XL+1tavCyOuz2OTEMQEeslz1GRVmrZQ3+4XHfcRuAUKdSKVMt6MbSqjrn4PL1orfTHPATvbPd5Qt6D+qW74qFg1/Rpx9nbcXJrA0JkUdSkpGgydWbJQ1unOH687i/Q8Nion+cbEuryK57VFAuRvLi2cdm4DnMkwCzmn79h6f37VYbUW1+1RjfTf3TVgocGVYlEbP92aSioA3PCHp91gxNStdo6KSYNekLSA2J747PhyxpOiGg55NAtn0SvT/BWrbauNVsoVHLQMA5li0oQ67+MleNDFfVepModG9RPBvtmu5o9HMxN436mPXXYHyMdFfI6skoA05lv2AC6xPUeIHGzD3KaGYlSa9wDIZXkyuEtMomCb/mLbZ6ieVbVf0XhNMHY3wnyXnKfVTNcMtPkH6UvkhC9i2pfkmZPanPtLi9YJNtkvKwZdFtz2mQ7wIWye1j/V2fXiKHLHtVy2ifYy/S5ExNBZk1fC5dIx3dL3C1XagY9/zps76gcWNA1IHKti2faLug5m7Au6bzQa49oVcmPUCFZNYzQ2p35i/3In3+hwD9q3q2aMA/z3IAs9b0QJmMEA3y9dmHcD3laGLW80rpK/+XVoDu0qNSTMJm6uZdwmTVXMRGFqNseHIlNAjau8JPjbX9pYgjGWPo8qDFyQEo+lp9ltBucs3KJvuib2/JewTJbkAJ9zF++fbn9fyg7JbhtlUxM6K5E3HGXjho9vDbaKRdB6wwVUoZfRF3KrWRtaU/fQa2GwSYpp/B/5XYIum7WWTT83jbMZkAYNTq0SNW2YRZWsvXKMd9Sy2Hnlo9Dw85jgivfmDrBwL9PKyzVZOi5C4Np2cLKMR9mCdHzkQdqlL9qyJGUHzwJ6Kf3HR+6i7C3E/HW2ZnSYpQ3LFBVPi7OyBthXRj/9x/O+OaDx0mmsDl/uTd2CkVbQ59xDKcS7Odo8NAHHDnIkWZujwH93gLwB8GrZlcDrG8gvJGfvJd7ErFCtow253Fk678KD8N2twW+uSNx9l5I4KqfaTmKeAbkDn9zVHk9aL3kgc/yTJSAAR7ra+O5wOKTSVdae/ZIBim3EZkwLcXzKRs+M6VsVWWRIpm1vy63Z3lGbyo6dOVjsbxUOtHHXfTUA7xCsj2NuFIpOUEoCoSaFMK0fUzg4DuahMwfT1Ug+fV/JNaFV0Sq93QjvU8wGef//DGZG4lDahvYqBCmBxLVfKuyu/6IHPzh5PGhfNlFFJ5GdGtM4GPPGN3V0oRS+KLGjmSbqRDbN2m+qxU7g4q/jtjE/BOmgmOG9ESRGjiza2HwKhaD4ohXtag8apEG0w1NyODnU+sXAeCzyfpj6YGOyLD6T58aBknVcbt2LdHdP/ABcHy02w8k53daVOcOElKGHJTAFgfkPqbyH+LgslLrt7kk+XX9fzBxpAvccgEexX62n8JB9ImeiP0mrtAklH7tkMHTl24Rckaxf5vVJ6DfeSe8entyv80KDiBH5qoIcGy+uc2unYZQCfF4xcKH9EXbtMWG5ZGOiRv8Mi3PtHESHqtYTxS1oTQTb1oDsYPHcH05gR59hOWyHqG3mDyzkwt7D0HI10br0XY7THxdYSmQtmSaSAkiSyrpbYZDF+N4wXD6qsUsh4RD+1IaBl/hknVAuBdUGhxeyF/jK49GC8QeRl3ATP3kZymqJiJZC4X0rRZEBihKjzXlm5kPzmYah01DXWGCQlIoqwSrOtAZG6/hSeUIh1oZcgs0b1S/A6OgjGgwtcFSOm4reDJCRWqLP/7/EGTdaxerCQMdpmL8bT0DJ0wVH8zM52lVXF7rE3xSNY0RkEUAoGudlSchNOhevRhh/4UMyoK11+b64wTXkrKAt1xNclNtpPzBhZ064In46G0mXcXp0PVOZdtl+wQZ+y9UlySM4nvHetu8J1mMd22nN4AsoD7rWg7ZVKj+CTgWVpkNEr6mbBGa3z1pfXV2Bxe/n2MwogQqmGdxQyKtUaPY/V7okOu4rC5rOwxw6Nj3YISxhvWOoNun+o4jZU6jt0aQ6GuXIxz1p37gAYFk75adivD+yWa4R5csOSAGyod1NaxuorTSArEYjZdaAUqM/P/uCGDzU9QvHp61Ci4ugk0JsWo9kINldjvlQ1PhvlK05nVttEwzvfC5ZdXjMkPkhqm08q+pWHf+EAJEKO9KTKpZ9q6L8n6o1VeJGCpqR//slAfyG8a2fudKV7RZqzFgh8MiGx7o1TXw8ceEBgIrmO6236cUt8VrSHOZQS7ZAUlc11PWq5oiR2STKCYpoK40ncFgNK5R/bjhPyY9nJqOpoyXgLHis9QNCcq695sFZVFbha2g3RaGI6auIk8frLjNuSJTA6PUMuCdy6hh0LMiu/Cd4nnEGOePXguwv6X0XPqylabPw3hyGkOSsnZgKj8KSgJtoUIGlA9drXisOMMjEFyg7wB4dForJjF8azObOXmBqihNqcw2kPskAdI5hKlLKrOQcR6GZq6Fkhz8ToRrbp2AuPOYmiFgfi9QX/rnexE2zNh2SIv+YGOjir62SbX+Cb2bdPOsHtrWuLUUQUl86DzutydE5ouR2uHh3oSOVsY1zwjaxVxx70tZ6MIEMGHFbfIHn1a0cdAvLCqIA+oQ7rx1sTeVnnAfiMBxahJdRgKjObgpYQKAnYqACJ6UecNGxppiaf2QB2gfv1YG2Vy1X4+ddvEwrAMfvZ+sjLcre/8FzV0mC5Isx7+VwTPECjDQzyjKhW611mFSB4Dr+1NrxaW6kgDS2e59jSc1B/FiioAC6qUlgc0XoBYTG5W+lcMnD0NeegHuToogPjkCXCemzAKn/4s+BNw9oLEqnbKHXg/3n7oF/TG5GeTYf2Ssx8BNUjtlIR/dAOZcuzsVpgT5AkS0lMXOs/Biv37GE7xkd82NpHExafMW6KFsG7KSVVUC2GBkW7ciyewVUba7WjhEwBakArs6uiV38TNA2LVWL7i6eWEz4cu2EDiPyGhWBedd9YGrUikOzDyfG2mKNtQWCbFjmxbyBp1VZlKhWm41aIcl2DUzMV2UMhDSW3pM+T/hO+Zt5aOgvNTClLMg28SLKo1QFkYpXwsvIDYItwxYAYZNBt7H5wdA/Oocyxl0dHhT/GyTEFo06jtQ1XP4nHiM6Uum1zI8/AKGduAPM0VaojuQSgl3jIhQe5pmUls+POzR6jF7IYgvsifUD5hPJfPixzNbx7ztI9liPe7jSLIBKBB1gA0ilerz5Ipl/YUY0GOzFGJ90XuB2AJk0nkF5H+eFD+trxhSvpoqPiXQfo6t9LmjMplyGswtSBgH6pepAGprQKgTCJc7ypTwmk9ah2hP5y5H2Qw78PevXjszJjkcTX2muKcc94RkdeOS6wgpWE/LmVCEdO7pK4Mb9bEh/f7WqEAluruo6E6augnhCeXQ9TJ2rulafAvPg64kFgDFiPrgXbcUL5O2G4WOq72zSgL2TMLnssRBv4ebETfQejF76eE9RCuiQENC8EPyUrwAPyzugwBzJPcmpbFp1P1/Mdn6fpTAxNkEGspZDdk6Axpdg5i09zLHLSfPoVelmtvYT/u76LBgCr0I+NOhV4RAJET9MY7o9uIjE0VsgPeSgLqowu4c8KP3BTk6I+241Xok6SvyQzaaYPMEEDVoebSHqXM1gOIxoTU/gGL6lnXNLZmZPYwozZ5HneEkXgAnugA8PkvcWvkK4WIYpsL7J+hvFOntyKqboKgfCWRA9hvk4QC2jf3TRQX3KqE9TYW7uJpGQloqughaMLZ8yPGiXWFQEhpgAeGqsOAjaYWQBWcsdpRO+ek2pBCV8EX/kATXTHcDXpeO7MeotFtk0ZdTPPKfvUTejFAdt2zHZTa2+UYV+ROuhbywGqRsiaQP4kjg7BiMjT+gDZ3QFE7Tcb5vy/qGE4eGibJy+9EZsZTA7O1zoq1UZ5zVN2VmccQZL5UiJzeQ+K5ij/kS3l51r0N0EicTskmL2/bIL9gopCfAqGcQZq5C0E73t/Qp3XZmJx+vlmy95ajy8DGg0F4aRNsSJpwwsiTWXLNYRVRm5xg4DmRG6wCrhJc90Z62fMrdlg2NRXjgRMbDw5kVr3y7uu4XuMpjoaq5bTaLw99rpVMIGNJn4xD4Y9h/G4vHaFBUN1JgfFEJohR+YIk3TZ0bT6W0ByaIx/l1JsYdY07vEfW+FDvUKdz2ZTlWgY4j7R9G3EQZfom7XmPyFxaBrGGhvldQmJ19SmRKXzF/QVXaklJlPz0bZskxlr7eiaDO9AM0l6Tbco08pNpvZ/0t5kGno07zj6zvTl65GbrixKE3KH2vjk6i3OMRHP3Zv1dAsaNKtoGdiEmrV5/b1cvsH0awoaYusXsO4//onIeBwrPUwoho3b/S9uppvlVkC1YlfDVifRs6d/bUrpwLn2/prg09dfPAnQC2rKLb/lmc6zzHdEOXxi/xKQ/F2HBoAeWEuIlICZO8l/0tqReSHFR0GpiypxixmHtDQE14pqZ1y0IPcCYKLk+wJ/cdO0+U1T4KaGvBBULjJy+9IrRMz4CqNeyAPa0tDEKDBqB4uqomOFmE7w03adJgwXfs5xtqWHp9x1iP1vlj5WysEGsQXcaV3Ug8SyHE1WaHxVdOqA9+rFG0H9Uk8H0B4xRZI7X2GMqhXQN24kKK8m512QNlr2/xtyayR1IGYnMkwSslwWsL09pYUng/AB//0GTtIbwIW6MEVxchLlhJwAUlrY4PqAIoiNNskm0QR7vCB0uTQXaNn9A2C6DPjnIH0IoyYgEtioQbdu4TXv78h7jLuvwZX0dcYgaCPUi9WIBso6ae0wT/MJIQgEqw+krwNH6U6KzgCY3HHCTpfyu8T7RTHvwXBOtSsnr1QtGOaFOHyoyaN+zEngW6gxupr2TaBDiQ9ZmDo/OHM4I45uwj4hfk3PywRMqDA+1RcDCKL0rhBI9kXT+ZHjiXADxiVyMooU47Y0yk8CCaGsnfyFVFniYwV8W9cCCS189fntjX8FQzsvp7i4PAo2vXCwfM280ueMLnQpXWUVUboOQ5WPnRUKXRCZGnDOk9qpBunPDxbFrJZmdHAVY4IMomXNvcWV51S5C63m2f5Mx9URCXA+a4BM2fPLzaq67XAlKklmAyvajSFxG7XxstCoOfnECiSw3c0TtOwlp49jMvMbm2xh76ts6HT5tDauiA9qqATreuGzXslh9CLVoiHPFpH1wNwexWTYaTHF7pzRNLHC2Iev77ryW9NFVLiXZYCVlrz+jCigAWrwEQiwiU7apwHGKGwj3Or5lOhe5aqg9DcHs8UsUgT94hdFrZdOeyAe2kPr3R91kCnc277TPDj/wpIDax8NVeqD2YHlA0G6YJ3bZXZGRCTWlrg3NOjQUOE8lPK7siVlt2tKE5NV5QssZoN2R1Shb1fAZBrFHFYujonjj6IJ12jHg5o0ts3MET9eA1qgKLXRYkU1AeExaf5C3MA3rYWeTg+jsxBJR8wUKcP5uEWv78ca+boidl9tH72sVYpzyXPXN6VkXasLj4lLO6xwQ5GukpmuV2Hir2RDoUKrCeZDp/uzLMFZ7tCyn/uigGFdWbk8ndDJcrKF2oH4BZLKIIN5tKLsSghMJbxuiVeCYMzOaR7BhbwV60+f9KWaTxqyJZsKx9OQCiDoJXHSB4JPeGPtPV3bpOGmZsguXcHkzk9kYUZEPCMvTdnXzFQ199BKWqoRwWqLVFAUGvlg9NY76mEMcPfvGF2eqdRJ3qT5XjMJzK0eL3Kov19m2ztuZg5SRzRi447fqVhwbfqU5xcIEQ+uhpLQI5uhcV79PQA2YzP9fHs1kXzGPTx1XfTKrjDYRx/tVGPiMBhJFiaO7QLlzvKn8r3SE8edmU8UR8H+T63cNDYQcPiMrnV+venu1zwZ7ukyEHR9XfWFliSSwYBCjFOjAs2mAp/b5rkc/mJPK0Oxsf6eNHdxKAQJEcFLJwiJfmo4i4RP6+G95gJyFrNKkp6uz5DOdQ9tvTSw3HY4yAS13g7AGT3TJnkQJu+EIL4cQxGb6sjlCpiey4cKcYiBJtwfRznQ+4nCTWMvr4QgVOwsS3kIZd3urhXLYGHYVQqzW4t4DgWEhT4201woUnIOyiBiccWPMvBraM6DCN94vqicu8lE02ElTtwqc9YhlokslNFZHxys9Kx5n+YCkIfPWtRFtN0QpEQOVWuW+AupdlWn6FYUIVrwPeRyec0RFzARaKbFVogcRqfxu673SVcuqdQfK9tJpfUYSuMSqnxeh+FBkDhZLMc4BS5YHjNb7HbCGR94q5tqKtzA0Rdr544HW+CB2CgXnipEjPcuafA6mHwAb1+isuDjeqj2CVHT8uKQ7IjdwGNce4mjcLTGt9Q3XFyDCU2QRZ8xerIU+vy5AcSLVeTMEguHFNt64RZT7nooDJfKPjf6JTjVIOAzTjTmzPPi8eAMeBGN07VmtjPRNzJfuHhWrrfMLE08hZwzEaLptwz0CZeLBr7AQFDQabkP+SV3EOaH7NwaWoqTGZnTyIZxOB/cPM3ElVc/BWumYIffsNTucJ4jhYpIPZ0L47GOUjr0VSheIOID8i9NE0KH9e9K/GS/c2/N1RCmpElfo2Z7PYy0rGunrxhbVY6pPfSggvEDzOkYWThPphfVi6Fl7eKj/iTKVnuVHPsADHmHo9qEmC/0SC+rbyFrgCb/KNpQFMkmyXjs9cdzHy9nwubqIA7FkgW1oxU4RbZrN1xBlFlVP/s+xjyRbQ6euMHFPj1cxP5vm1N/r5lMaTPvL5H5XHO4nFTdFdh8y04XQdNRZp2JH0MrNgwOcd0e/XBpy4wNe3/K9073EvJPINjz9b15SecGRO8gyOhjnJLU2SY8euzcUw6hMr+6OOptatF+K4Q0w3G6MLh42bzerLov4VaFNhlYNFOS7/VJWBQcRym9wWyX32/CXesQZPb83HCwwNz5cdGYlmgs96Bd5AJKrbhZqbOmmDvUuy100ivU4kHod1YotvqsEKXYDlSgPCMEPP0zaME1ntNW5i9Xc3vAQzaAsoAWgSoZMk8H+/2JovKpwY4dTyLyVuOTSchCuIOuJKHBsUWyC7ZH4+JhLQPGa81GpWnFpplLBXR2SJQS3eCxW69nzwA3O2ujVNSLgDrWGjbvlcNL7D0Fii0wSIjweool/M9fDMppcAW49mvT5xNB53SGYARKKfjl4YQ40m5xGl9h6JhX+YDMd7HnPslR5I8sAx+3GB2O8w0TfywvfgoGuw5bZDb6kgQFHPJX/cHVztqKGKiYXVv3FuIL6p6NoDnXIyI1VwvvejUS5ujbmFyTOBm9QwjAtcdDOeLwo3Rdx7O+ft9jGnEixAIUsjBI6Gs7eYeQaYYIosfmrRkORhozWuw6CQhrSUO/gHmd/QnWdY4RRuzmA8UY0GuEH0XMFKpnlIs9YBi8cZ/txDWcRCOGY1wktEcHMsNmCxZdPnbTPeMTDV5mbbPIhZWcJNbQKKi0gGxZE7LlEdPM9TvSuXl7lqeWpVZrmcEhX9seglSmioIfl9BeMbcDvnuC+XNmEqfm2wIJ+RVHHSA9WKtZNwDCCizs6L1xImQ+EuUQf/q+Ck5IKC5uANP9SzzjK1WzHVxvr/BgkvbeeUKkkvgY7omPu84RHl44Bx+18l7+R9FINYAKN/+W82oyeuvtKcidlkewkqM9W20Yi7+qzUhOijSf/vU8bQ/PST9jbVy3vPyL8eA508XVNvQHcTD7cCwOgqzl/bCJhgHn+K6WqXZrV8wo+fdwAHuGEI9TMYMYRyS2bgkWYA7qZTdvRsPn0BakAAszamh+2FcS/M/H2sEIqKVvkQoBK5oE4uTXEnvZmqM175BCKH9pAkiKrtXWz/a/Fae0kUmrI7BWooVN4qTT7HT9J8taQpVkiO1F0a5HO3VHsY7P3zmxz+NlcB2pGqEn3q9QxQKJE0hGOrIiBkfS9ebmgOjxr75rF/2n7ek8j8ojqnqkcH/+7P03CMAAVe8i5tI2imuR35wjjbzcCF/WfWQO+C9yPva26aszpitmT/ipC9a8Ip8/B5spg44NGNxgYoB5wPujzGntm14P8Xz81vIL/fDfQ1zLn0BUkgnamsmjgoHMsF1lMly6ddHcTkBiB1QPtQ1HXqYd36JqCgS7J31Uhey7zcJMIkuYmlF4F+EwfFqPskTPTgkEvVcvlFyjAnNIIQvA08cRqQWktJiUf8fuSbxyR1BMAgLoAttuC6JR+vmmTtQVhxHBi0onUKEkvb1JHOqlTf5uRJ9rI6c0B/C3/tG47Ff1Ai5mDNPr+45KiFoJ9R90nEQ1IXHaAQMm/j5gDrXLxP2blro/58QXOhyvmNjMZIJFuynrGvAZk6GQ34vxRBKiHHrdwZXbgexBpNaqaSpsv4/ES+gAr7gYjEZzowNxS6mPI+RgCJxb9lfX3q67L5vnOPGj7tgsiPk4EsumKAZal15Q8vc97LAjKboigrZhdvn8qoNbbyuIi+9zfrn55VlnXwuems/dFX9LB+IY+N5ARDPOv+wc1VA5fEax2zwEPr8Hzjn2sCdbzbZNupJ1kj49kv7ZLavJo+rwcqw269fRadm8yTv4sUXulzq5wAPrV+goSulnkj8QbxR5w2AnQfPLMHKv+ZHcO6y6h6rx00b1vM6cBfYNSC9w8VaYBQdk1ChbZxozUP/o8UKCkvTZotBgqdPysDoUePZHCh4ow2LvsWnvS72cp1obR0yYPFC4mA0bpwFliVQtpgm48SL6eLPr85u0FWOqmgO7Qpt6xeszBQYxEoMfIM9FH/DEHh5tV9iI/sgTcxi7XODMtTpUFGdaJl5GdB5dhRP3jwY6HhAwCjUi7wAPXskjmdYxMQXwOfSsioIqyFnCuGWoHhZyxq6gGa9B+kd6nD3DOAzerZMYEbFZaIoP0yJspsplX+35RC1NZXUBuKz4VYfGOaznkYLniShFkCK9SJe/uboXkPSO7Mkxwbxlvz9c99m08dEQ6tna1U+sGwPozXXLpBhoUVWX7NRxXq9EzGdE0JbNECLTsGzi37sTsTP4fzNjopwdvoryHWDVCRHICuxbxr5y4HfEubBl+pIbqtUxCJ43QylSvIrGX/blvz2PR6qDYEZXGBtt76dcNCIT1Oarx2iSUD7nt8jnJWErkMbHbPhn3+4v63xtB8KSt7MuZ8aePc6MzT1GOcabFE5ILkv3pE4dcbL346WaYc+EcngcmLpB/NwfWRZn45BUCl1837dZ71gOSu8HtQFl67T1GKadsIbnXE361h79ZQucyCjk7RDuwAspr6ZeZy2sRQd67muP7Rx/t0DAvgti1sqpKYo6eFwYP5exF+84+hG3T1T2lMImb1atjfhzKiUO/OVdIQXMvacQs/vq4MJtQCoRbVVP1Pr10Yek7GYwNRK6nW46n6ZLGEOdwecFP2lBSAlV8DefwN++wUshidoB1dQSv52du9h7lolTwsJdab05WfkY9Rnv9YyH0LvTR9LXfWH6jbdpj77WZt7B0kmQFIDa216xjIow6slpBCIa/t1eC6XrPUs5URbqRYRsvtLMh6pMcjCBJy8v6ZUhAmEo5OGHQuzDrNOEMl5PhRtkbHysQOXosk9hPj4bCaN5SzcPMzBF3WckYiX1XkbpOGbVn3bS/EtdIYvVU+jKx95wQbm3yV3zTdvYJr5knJUSNfP0XTJkRsNlCQa223YFdVk3FbTXS6nLFMlKj6KfglCz2vWMbNz7AFME5dU9sb0iruVlhdnz0HTZ6nhja4wywwThJ5wzYqZyoUK0gan/RoX9TOI6Ix5OOE2d0bWeqpf3l/na2zZLgsaTifMBIkMHlvCjEAfMVvLHrFVEJzXh7U4MTEN0D/rqW83mQ+S0+3cTAz9A60dbWhU0nIXF5KONDtJP/x1AZp90r2WUAdHKMEbVJqFkkKqblrSceXd31+2aH9N3djGC2DP7Ec21wYGc8Zb0lnzyOX6Yzy0HCjUfOyrOnVVu7/w0CiqvV39ne//c9+fP/XtaY0if02Hm5Ba+bjXe8LIVYy9Nw5vkpc46FdycK8Mty9tay0elfLZuK0UDC73LD33uWWdyN7HXOP6GjqjHzY0R0Eh2UvLgNyHVfGegNVbl/Y2SV5r1Fmg4f3duafgGSKRmrAkTcsAGRlgjF1E8glS35uJe1REHw4r+JScAFsAygDLbZ/tbZcR9eoVa9by7GTJ1PJGRZsuUgT5luKTy9pvr7NMZf9YyhnlouSIyVi9Tbb4QruuQsMGqcM+E7NV2z9M36lQWfScR3O0bK6oSQCxQzyUeaO3dO+3fx6E5Vz4YF9fP5ud1u9j1aZeWxv4cYJtY7z4lr4mw5Q1IbOdG7CLrVwEAsVv7tIskVNosYGahA/ceMzyoXWPIdB6ddia3nrHHfbTEP2vckFtST2TE/gK6W+fjy1xLovYC2eroIQCDuhCD472IWC9l8nDky5QkJLsmzO14IhuWaSUVIdzSn/IuqpyaBOSavNyhfLzy9iPwRlnti3/EhtioTyocRxL4eLL2BWTKx94rZo7bmzAV6OIQr1isxcTnALlFn5PVgsfb51nKaRgdDnunoilh856ZgEAevkhqcn0dLb9w+6qmlm9niT7nX9ihsiKqc7Xhjbi7xLV+4KxxKACRvFDiEd1JToUxU7wO5/l/vFCwvdKJEbQa7qdSjbf37E3xpsSinyVnyWWph7tf4LvPQ573JBbbUgG0rkGYZ8cRTxnMsmhTSHLMLR3C469Hxp6w5d1aPErofeEjpT794yRR7Coh1U5Svbh5fseyd+ai9hOQpa07BcJ26Pvy/snkSIZDjmVhYmhhdIYI/YujdMZstYleaYOx4+jvWQ1McacSe04j4hZwz8B7VqnKtfmnLEyQW48J3HOmntUOsMuZFbf5K9MOwbO2P8FP+YOdaJRdu6xTwZxH7fN5/gJqR7vCbedORbubqxiXRHcrzRxiaKQgsPaO7RdmcpgfkSfgGy4Hxs3pRRBng3YeVme+RsUmKlQ7EyxEeVKOcjGafbRuBsuU0o/8axi/MEz1plV28+db2bEwaPnMlP1bEhn8mhDGk/W13vLzClvRyfhMbPImamFc5xn3QNiLjlJ4Bfgyso6dhyH2ROPKVfCO1hOIefycbhLgZD+HvFSqmYWoIIXcKDTHP8U85OX/9VDptQSeZ4IPCxKCF43aDWJjn0rC3CR5ap9EybwoAVRAcJdKulnEbqkJvSv1Mh6xITvUO8S8qn3m9qAVeS6oeIZH6aW5XL5kdpS2pPcxlCUxM+7aMT17feACy8EdE4mX+6bTr+8BVI5FnIVci1O7H6PT+FIniyO9UqOQi5cgSNemkjVtfVRlW/1XcgkOP6T278TD8lW6lbiWrGdKenIN28UM4mtdKwLO6p+BWfCeH4kdKS6hauYrLfCNX8v/RliUdrFy82PVbx3bDY503QOR0YoSduR/4Yh6xWpDiUwU9vpedLq7Ar4fAZNtzx2GDqAbuk+ucxv3BhAD6OcfEKpfWlPZVSzkkl72K7c7v9PYjzOc2tXdDMy/jx3WQ/D/VLzNjvd1SSmpBSkNMRxJVnKgAtT/GAJugN4Z0x16jR5LFvlFlZLXjI4z/W70Yz78aavJv9EcAkK57Da9VpeMn5UuQKiYv2kqI3nVAlqgDVorEbfD1oxtUpdPJiPvMJn1BUvNC/CexbOgPaDq9Ons8+Hwp+xIoVkJWVCddTfTZ5tyMbymQu5SJO6hNpWBFZToKgfv/MtGUA4jS32uHClsdiwvQlY/PjDEC+F6Y0Y96CnGiZ/CoaFkeTpV87qmEP1tq8ThmeGrzzTS1WZQoXg9B4S1G1GuFM5UEOWqztSNrRfJKQigauISpwsmus4urgnrXDtAKDxKhAifJhO1XY3RZjOV5nnP6bYecoBCT1cEr6mfMdFdalPvc3UxDZNIK8ME8faROlzvWomZ9hyMOdlpVyzvqlWVXSmllM+v2ztkUISWRaLckAUmCZoV78RC3y/yCw3WzVKkyA7o7daD1nO8txd2oJ6+oZhu7vKjnqtmmYR6cDBgxP4ICKu+LhZOVr8jTGjGuGyzMJRS8EdOlwfZFoQPwBVyhR8ULAnqHZESo7wOKpK3K4jqb9orDPuc9xvlV1fHEAi/HuVD/LhMmXFKcCIKxsI7Vx59ojTRul2xuAIbSMb+nUyHEeHDEnoC06vIADnyP9xxXtKBUGsZMiQnE6VxFzNALxO65KBs1/oeOlxmjc37vEYzm0wo9zGjg+/7Osy95l1bqPGMfJb+ilWEvO5N07IszBxU0LQg/2DZQcKvxkOtEZWlD0P82KYNgbi08JgbIu+S9L8YE6szP0tgjT4CNK0HZPjzfpAwrkxcFBE6tIkymqvDIp3AhpsP66a1ixNxo1MuJ1bToij9JmdtbPyqieXJbEvAusbsawRe6oKepnVLNYiBSlg7ZQMAysWfqIbj85LEp+y1Tse+0QV2Y4dpk6h3fEAeXryY2O6UsSVEFUjC7Hwohq07aFmURLIMoEHp8kk4dszaV7wDR306fOp/Yocg81IgAdSdBF3Ck6xiF5SCCH1MxV7xKMsPrNQBp7G/6BSXqoGAK+AelQI7XKIhB423Sm+W/MGQNDVa9wxCxOWNBHw0mFQwkkh75oCMX8qm6Djg3/5oYguwTI0uzsJFKogqoPUvpmD6FJPP/J9RZfHqc4s8jYJj8pnKLQ5xQ/1tBW72rAU5t7I0xjSaD9m5GG3Qgg/so1m9EQvaacOkgtbVsAVK6lYFzJKCDr3glnysN8++3ZDPcO2dsPsCdyWZqFhBpAIBjl6jo1egfbpFHpXpRLdyEkcg9Bkf6jEXvPVSGFhAvPimWWlnyzKcv2Mw+Oc2//Z0QnRBIK0YTdRIBz82VxicjZtg/RYU15lkVEian2GmRn45nCvOfVpCmRO7n8P7ZbJTYajONXcU1OIEG8FjMHNrLs9T5h8wa/9tSdwyyG1b4CVeIlQ/0Z7tsTC2LJpBHuvzqcIpaiSW5KmDNfZpj1N/ALoaEO38FFqCmkHC/VaXFnXXzQSG29aBB3tXJy/cZ0OGR10iJ7QsPmaPfv5IYVaM6FFLpylgdjgQIIE2VU4hWZsv2k4rpAyOrUWrty0wSUdv3LKjiiNJZjTZvQSNiL2YVfF3K7lov9X4YfVqKhUly+JXpc7U1HQBMHtJpVQ9VQoB8u/EjVLX85SKxGw8SRCvmom8uyQyh/EXNLbKXLjRPOA2fNkgznMwEr+TJYPLrZjLcXjetFEd2VyXC0yDjWMSoeAWHo/KgGoW1Plqhy9kNrSl0ZCcE1+Ovfflc6H3lAohJB5Dv4JXeOgs7IMgDPghNrut5iyAvnfXY2+S8ihhnERP6+pIWn+ugoJwr2Gs8vHIv1d7+UcsQPOL+X6nHEkpY5bOue3D+Bd9R4Hp4vXUtgnU1eGM04kHcJlN0UG8zV9CRVLSjHS94ElC+pkc/dmUivh507E2eMFZNTb5CnQTbUOafn9yMChGgwqLOjC6qeo4jMyaJp2RyNV7yS7qjRyGXUIcCxl9hZpRDTVteE/cfSoW1hgUUqTCtzmqlBUYZIHWwfQ6ji9/IjIQiNwSs5Kd6wQSzGeYA8h1FAD16bOYP8BxiqDVA+sU/nQjDiigeY3vy6r79i8y7s6Yeue2OccsoyvvrAfkTfu47QiIXrpqnxe3OB2V5kw/WgNmXA4I/+aLTcW4aBx1yC9FwYzp68VmN+qwubrPlZMHbAX9pgWdYxAlSwMWyR0xPl+z7fpxelHra90TZz30kZwU4IVJhS1azDaT2qag5ylOM7616qMrHduU5u15VBpZJeIkfInShqvdygTr7nfb7yVQ447QClAua+bjV0xADdQdoZvaYUCb/lSQ7UPRGJwTd9NtTescox9vTKtTPXmWIopt9N/wxozb+aYTqlMXvfokJtMJv+0FISf5R/Z8A6GvhpJl3hv8UrrazT8rvy51A/OYIJrQ5seD6ugpWndO4wOTJqVVoWUfkxW2ZcirfPTTNwKqSzAyF5/6pO2w7qnb1SS/66C2nYOZHKb8ATcXbuCqAjU4eCstxwbvCJ++DNQOavlrQKrtEkT8Q7z7+Gx8PEb9ZOMu1pf2U7g31lAZTyqWbkU4GWeX42TdS5WFR144jqYlbxLWDk3q5r+Y2TdHUk3Qq/fPYteRquOxiO9FmOZ3lWBjeeM39zeNLawDZhwmYzhdGGfmir24J34/G6u+wfWGZEnkgkWYEU87EP1O5TFpepONJmLFnBHNPCmMM3DbG3yJ57obiWfEQf1416jcYIBXnLrr9lgi07qFUXLFrFjThfW4hy1AIsH3XAVr2H6rSvJ5XwWZX/2gPXl9jMC0kUuFTnjvqjyWWgsr0tyYGKx2mvCrpkZ+QXt3idTVZUOcaWS3F6fk5dHOM35bp3fZuWIpNjbTrF9QfKzWearQenKF+kHCnAMGXLq19eByZ4LQ7b5QjrgSpxqPgRX7TbTJ0ek0j92sszeZDb6+At+62fTdGJrdShdT63IG5CaKDgABgKJGueT68yd5kmef5YFLCXqHAumbsjpNcVuwY96aXoj8PwfhL+21riXXvYL+ekxlLZFO8icVtsc3z1i+4OxBsg3TXsHKBAObKCnhut3RTEvr0RdoXNdcvxF5PoZUgtmEKrID8nzRafOLQVuxilU4K55Xv5bHaffKq6pg9TW7K4ksVjKaJJAmUL6trsuXiRi+m08eQLbar4uGgJ6MJtlAjNDuwOS/2PRCOSw9JuyDfeHGXfb+XHUg9baf5AiLHCNFzuqKfi0euGbLKgW/yQhDIG8cgVwOaV2+2+3j/2IPmpAJGGG0ZRzpdV/pn90Dr1p/WutRuaYonJxlk2/5ABPCsotJQH1QhyT5Pae5kace/WiUoHnP9Jf/rcu1rkUBEeS2SYD1ejSZEpmbNewI7HDpHGFywynGvajsLcFP4xW262sTSreIIIBPWdpvaHw6TaMdzlSZVM+QCYvkBC/Z6OtHTCVIkg7f9BRrxBQx7yYFcrZFclWopKRznKz9Mq7waCNgJfS2kyLvUnOZQhl1hblwbsuD5loKTi8+9dy3pZIypwBRpfERoB7rpLIgE7PgGgUx/kw10bgD9kens11WE56zKqe2PFq9UNKjVkF39vtYN9mCxcARbbBi12NcHb3X1/me3ONNvJWwsYmLsUNjhPWsm3/7zN73nOalNuCnBpctenngHNacqGWlCzx3f+2gLIDVFMI7YCiXK1mh9quWwc0a6QOEpnRGJYi7VisivClFRgg8j05BKRsZGeyleWTEWuxBP0XsorQGyCixGb77owU6u8cIaJ76ICLHSVGhIiJZNimJ/LoFqPm1vVcH4vH4rx42Cs/K3ei0dM8zt8nxQL0e10Ou1xFKjMWgzNx7fQEoiCM/PXK4ORjD9A6QCjjcTL8UV2O9R8KC+uGUWoKa8FbxDypMrdtq+X77nWR0F0X4JAmPtf9if8u+fyJrUCuyeVTQyMa9wWcecHNHnm7b86EZHfMEup4RI6iQZ+YCIS1sfWu5p9ZsO+BW86yrbD0vj+XtRyPKw0CXnYSpqGaW21D4MZdVWamSUVoEP1PyvWnTbW7WEUCcdW62d6yCBeogtxLz0RLGtZ5wHnKu0VrzfZPv/ARaIqDKo80R8utWHkrP+e6TVdLHqtrGz1u7YprvIFMy5K2sSagWVZXmhq/aOWaWYCISykhAl8tIM0/roB0Szn7fwhZJIph9kv0ROQe/Ys7CKXr7e5BTy1yNNCofjg7ydSrpHvIW/ZaSXnisYEuGd6rqlXM/gqeBGf6SB4VdomAZnWyvIkuxOrJXlNSjPjKyxQzyqyvqN2PTnoBQr8imihOOLfqfJcj58QsjrecNHiq7mINmSF08tS8M6fqOaPgAICl+a6caYVIb0tXa4Pdmcs1BSbdWa6o015SdUFpYwcl4mMFfFhavJXE7yDdUB+9ykseWfLM2zTccJyzwu9UXtsAWAHBjZpvuyH38VTKPprXkUeyoRNufqQh6mxLqt8Q7cs/gaRoY5CHr5uuUfZkc6eBNzFbspJtZpkOqez7EAI0GL3e6GjGDoFDUhzPHS4znbTDmaZaiYjrX/sxmzm+rMLjvJZcenKoXcp5qFrvfppsZD7Q/K2Hb/qxvVnV+sRrFnzUGU0AzSHp0nSFy62k9XmVds0+R7sM4OYIdApgfxjrY9AQSShIiyBiiArKnbtAPSQcOFrURselqIpB7FlBQ8GcRbtA8TNaDpgRffakYgesIAbBFFTssFsxbpP1kuKBZXuvDJ+LgrVSKMcURPta6yGsbY9BJ6HlowZ5FHOzAObAgZyyUEU62ZgnPETISfu0Orv0Fx8k1IZzp1Uj2JRkujhzMq9rk1aeFChuQT1N3T4EfYSW/TnPUgPF9VH+Acs0FKrcSGAkkYhATeqcHKoEHBRHV2oyIzdSnC0k6VReUP+oRGztV+JKUzhd78lEnjW91+cRdX9Veg4Cgwc0XacJgJ6r6Ks7ECnXwv21V9VDPAEKLkU67DN1dH/21brWHssYMpaN00fTgZyJMxeNm6InwgJfZib3wwZRjl+5EloiCC/5wJnhReMob76cC7EhfJK4ssKkoPdjqUPiO27fZkBN/16m2ez0c5m1TTjxa79lyBau3Fxnz5p+1MEdTx6iimd7DzyElMeqm+Y5RGcQELHXqzND7cWS8hBwbgYDuz3T52V6M0U6X4ePzmD1LleoTaYFrlxUvCRUtuVwS9M5vGtROTE+2NrZC8B6NGuWU8intHDceKRVnVL7gH3oLTFTG46S6emlHU+jUyx0OFP0+dRvAy1atM7Y1Q9KdFrgvz9OAiKboNSFy0HB1qKo9+aESAokyi+TboqhHpJRAWknBQT5e71NnhdbT/6MqoLDR+xxDbUtggL97rKtiWsQlQt0SwRmsqtP98lLta7aVQehl+r0lFhrJC6Eq107+VknG6KbG75P7OOWUMxwsc/M9oaWMYVi5bZh3UqN5zOhWMkQ77P6OBN5zAeKanvAl/rDxuTVNbvcnd6wznViAMGQ7+XNrM5moOkyTRSbU+j3dBuMs+MUwq9f5FXE+SfJIe1HulMpVuZA3FkzmXnedUX4yvHup2mzmfXntwEIVXJYMPQ4ncMeH2Dew4I3XdWLyCHhRq/3YVsgByxsObRibfdYWVPmpCdHqu5oWIacVLItfJ95rKBlqj4dyewleF/3hGX5o/jVZ9rijs3ACDLAoBKiJql6L4DDPtARuVSxN4TJrt03a0z1p+Qb5JKhO8Pk94YpuNhUxuBkgMUaMFk+SMj2L1vhAg/ijKHIID26CyqWhqKlrbwD5vzsQ6QeAXox+2cJQ2a2P8M49q2t7MCi9nwSizzd5pKe2mpthNp9W0UUelhGGccgJZUWCCtuQsTBBH/e+f89ze2jggZbsiooZNoTHuxURw4UsIV70i49lM9I+8CAOQwwaUK04kLxXNR1RQ8HkHap/HQZV5z9u30pa8+vP1gOfkOGwMOw9+PmbVhH+T4oHypjahVlf/BjDXQOcqqXk2anCKRQfGZjaclmHyX4iiXiuiLKSXmwETMHrxu0WNhNx690o2Bu5hYCRaRLkYv8ntaz7rQelhcGtNRtuxy/lQa3vNgkPpWBvfaVBbwEkL8m3Qr5Rboz6FhrZDfPYArT8sWN9oE5pxNLR2x3cN0YqdiwLnVv4KScovwy/Kz02ZI8VcTgn3V0SLELJai/WT5n8wOS6BshOmeZvrCjsoPzWYZQOkcv0s2vGyZ2/GmsX6goVwxw5Du9wPZpxiklnYw/n8RMkgvzyHD7THtgRTU6wbybgUiD/j+7GFYcHQDaYM1B1FNquaa3pKeLYSRlheWQNWaazukW+CFHmSdnxyahPlsDZ6IrsewXgp9M31fojx3sV6ZDNgQsdn/8lXS4mBmViOjzdZPum99ai2ugWMnDRPrFS+sQoN6WNq+vEeyLDwkMBA0vYPBXHWMu2ZHRf6jlekCiSa4cmKpr4KpoQiGTZycsQS0OwSWTGmSfZmHMinMC07jqXaYfYyBweXq4kYJcw8IZkAI3lg6axA8tTRyEJN6Xwo68QpyofDNOOaSLq09L+by4g3PVwwSlvNv1sjdNWECGzAxZsaCWxy0E6iyElHcBy0sZp59sAAnr+pOWVtEzGnqJ15UDNlghYv4kwPi3LGDUMnFMD04mlF35bQWugBkLpW48PBqhdzXzaS8YJh882EJOH3/33ysPS+e1rqP3qxDQvnNO8rRW4BQBZH/qtHZcPYICViSj853cJ/ITbl1TrJtDfTgj904Prf8GjooxKPt5iUYj1OS5kXU6AD8Fr+vKQWAjy7+IHc1gBzS7HveSDo9Zky2tp+VN+ztYg77jP4XlI8qE/DbODjuPjU05Xm970t2UhlLsy1Ymi54ovpym0L8fqU2CSU9dyTSZeWK3+XSr/vH7XjDFU0tzbnwT5rMHkD9pGxmnSic1LtM1HSKp7iYv/EtSLfQxSoNFjiG0JpUWxjDAw7Zv2eM/XmZOBvN9Dnah1AHpMOjYWzJ5U8ViDbgwpDONwqE/HFc1KC3jvxwgcDYa5JzoeOm9sCJo0aelLIkF9seLkgDOK8fm01yzp7NPYgmo00E8htK+edSDXJDKSbbXD3KSyS1DHfWgrNUF+BPW4Iu9B2baQItswT4LUllNG8q0UbWt2dxi3JzxccvRY/dOrYwClP0SPlkhm0XPXuWqIFzQFZtWOP2YVPGyayJMxAVZV6+ZZ/GZ4Y0zZ2UkAhopZfFgJu781CLCykqA3xWqFfpmVrU141CQNAVX5bCSsnJrgihS30pru9qL9KFXyWYxZHMvOVZOLLhm5eGAovnfopXTCHr0mm5FanNWOg82i7WwXh9HovNpVvcQTOZdc8pPI2vpdw80IjQiVAAOBgrQUYOxgvM3Yo11rro1BTLyYcxvIRKYtnVmrBGhrl+azlvsB9oVE/cgG3j6wkdyrzX6eY86MUtbOEg1UXIk6xVUWt5zKTdQNKzYiLD7fMSVm7YTkW4G6wgw3HcmA6xUp4e0j9QbFuqOg+IJdVDZmEY3z0935IT1KSTq7aN4PWTA57os5g6KUeTSwUDzu6HJOWHQrzDHVx+FwLDAtTivPDt8xANR59uOK1Yn9HKU9jVpA5GhUVYLBf19Ce2bd7AqlZNWIHkGkdokXGLLZNllyb+ERGraWCVcwSv13JuyqBZod0rPnofg3tDd14YorOQd4Wp1bhKxxoLzgMtDH8FigGpQwlRhOkDxLm341J433UuUdq1AF3QWr4BCewcKw+jcnu2jety36zpJ77WMqTqn0Z6s/ANd5YCb40kZ/4+H1tFAiOIf9RX5JojjKKV918xKf/7CuZHD0kul6fFVnH2QKgDB3iyb69b9LEj6UckxV0W0iWI/UFoxBEWYTkv5qSdemLrFMQuBstQXLT+XmTZGDe9Mg/F+6WDe6eurbKMqpXivaTO82h40XeXqD3EVku0sVX7Hg1160RfAfkShmCuv/1xkKq1UZxiaq8XzD4W9rY2fk6vHTMIR2PzXk9bhYREgTNEjB212K0Au085ZLNQuIOyaAU/EUFB5YqGG9Tepgmx133mxaoDTtUhsR+fy0vzY+gYX8+DKgPaMTHvxegb0RWbig7Ym3stCw/C7Cvo52VtvgLNn+iHCX5LPyL/ehUo9UPEzQfuOivCcLZm+LQV43QACF0zHahbGZHBmKkaPXCaHXColLyyL0pg80drbw8L77+YxpzCSwISHCBNtu19W86BpribTsPWo0VPyUe1I1YBls5ZKUmi9wYlQPwaMkwa/tIRDP80HjFYNcan4m3QLNJQ8a3uVoJcNg6a6WyQp52PHaon4aKTcNC95Z0pW1vvtWUgb6HNp9Lusu9ovhvvF9hoLy//UROFqe4HpAzVfQoQF5wYkNMV5i2HITqe0vtRep4luHLIjdeESsN1K7vBP/dvTiR5nV0W7HlB775ZewZz9X+wnzUPlvqdQvTmQ4d9hWXxTyZRnq+GjsEnBXRXdw0yed5o6w1q8xCso7zpitXrqgD0iNe83wYyWjZRexbaAJz1XiififUqSbK76OudWKcIgUw+g7S1DovPBOPAGACd1yh5JdwNgH5XaWnupVYEokIlBqWi3G8tQKF7NgC7AJDIzTZhX5OFKljsAJ4nIPjCMNtmG8SFYauVjXrauP6pk0OlcRlJpwj46Q7AlfH6Vq6VdyqwuQPOAOuoHJ4wAtRI8Zhare/HGCvfHosf+aOHi5qGsT1Ua5Z+VwrDak9aPQPpCWPnhzIIfLzYBNC5RhbwB1e/sJ0PvmD47/uVKXk6OhCxAmdKe8Yi1QDAitsd+BdYnfHFqqcJ0hiWL8P0PvBHbcVnBQ4ROt4GeFm3LuN/pw+qbM3rIRogxFZpxrxDVrWQSoJaIqaYxaAVRFhDt3bpm8U4k2avGodXDDeAI6Zd2PgSkm11TqhNvAcvhgHx0EFyI1Q0hLJIUN7qmgND0Db5B5BkaT+H8aB/gR3XuPm/dmXmSLQW0Id8ZIe/5tvQhNCjz/q+MqKRryt82a3CySCbe0rhC6/AaP50ySXaLlVsGLXBTtIwkr5g61IJjTyW7Lss2BhpIidjA8ChMcKdElrZHroGmzs8W6Z9jsP9Qfj4AgEJ4VkOTxqIeUL6XWYG/bgM0tJ1xD5jvjjf1PNn/KIA+znqEbosHqkGJ6KivwWIwa64J7fTQ3sQXixp0XdMVJoqA3wgRJ8+4GGdBboaSRRJovcaWtMms5o6UCe/mOKNib16OC7bLrE6fRVj8gxvqJni0SEv8qnnJ0PH0GJU4aHRCY5/aT2nWfpWMKukNOBQ3pCz5llWpLzbGUI3koBqeESaCSWPTMgJ3ub/HenLjXwBq0qZRkY+FPjJ+JRNyuVlwT+/RCxWXTwAYXR5VvHZT/x/vTGxEAB575kd7zSiqiRMncapEvvvDD50JA5eQzDVH0hC/wo90rZIhtJs0RbP2BKcae9Ygxg8YVe7wcPhOpjQrpbNmklHZCJ76v9nDDo2VcX5eCjTlNlbCEkuQETA64nafZKphrxrDJcmMsHKw3w2IMQMtezbGfMz4I86V/sQO8OkzMt8/ibjIm8FeNojcao3j7LbDgZ6g/gA5NfP3cnj0Da9SwnWMVvctjnU3+29dG89C5vPHtMM1iHXGaEM44CR1ok7JHXupJrcH4Q3BuXbRKu6+FgbkVoOKzv345KtkurPAkdsIvoLpxH2gZRWWimfYqAf64QjsH45fKUK6UwskPGe4W+dwOeXDODv5TKyg79Hw4W49KJakyvpilzQ/nG45DvmfrTTCIFjisAtzPlZdVwXy8Hg7Ylyl1SsDSfPoD3/V4CgxkVH3B3MxEa3DbD3PFNI9shVs4GecltL4jSbkFu/EXJauJ5tGgfSji1MN46VV71BWYQ3nRdN/d+OjawsYZ8Njrcygx4riE5W9lVGSlpncFBdAMlsyuXzHQh1fCEPeuZ2En+8cL6akE5ygaT2YLJqFPi4YLrmKLajP6BZANRxipNMbU6yiR9c9y75+m2nF5OduGxw0S6zXygOHaiubmwhwQ0V6GCvvaU0eLOVBspwXR13kEtVuSd1W5Ajn5tb79RLSZlI87IuOyxSJtApoE9rQNtbl4pcw5vQQaTT65UKV8IQkU7w9XfBFtrTgj8ZQ4nYbb28KAO7PKPIDC3dHmObvSljDTNvnPGsSuA/iXCBwhFECIbyWzh1oZpgI+jjIhVzDirSohdAJ6wMO1xG3rgSmLNrneHndnMKOs6FqFWMhErNrRoMI1KLaBOwRZL32nzyunuJUULQhyQ7nhJZth1vVfmBJ6+S1z+Y4dJ44CvuatGmDlhRdJzdodG3IkGty+MRR0KjruFyEDArm8t6pYOe6i3AKbA0IziRo6EDpCgl0IGOy5Gg2BTFQxZGc2syAKfiPXDcq6BfTnexmnffqrDHuBIrhZyqjsy5QjXlDM/SvUqJlQJ2HTrKj3joZcyY7HyxbRncND7CqQiC5zfIM9ugLHkFGExnqrFMwBcWXXr+c2BviP4samA6pmLFNJIbAVTkkFGhtUIIQvqLpcEszqiTQETTgs03MNzlPaC1K9tETe8ceyuYgpIfY2ZNmPRBSZ/T2QM2bLITeK/NKQs0lyo6zlyOwR0hDTYTOB+nazFg8SVBOjGu7FfFS1DmBgslB8ykPAflptwfqjZBMoUNZOiJAfLivxuV++unSuShryJyi9dZXPCyJlxePMoRQOf0oNyTdjCMCafzOHe7oSQzs+Zov2x6XbB4h7lv7qu8jXv/lltBRgU6DOhXStc7YOTKvrz7+mC0Dcq9D9rVbseUkR44Z0tfkgAMEabYgQ914tuNTJzxeJfyKweyPhSMWP65i6soN7iapbVJuDgfAMAo6+SGEZniJtD1p/JuI3dHuyyd/Vjh8JN0zQLM8I5gGfsuzKdnQnKKGxkZLRQkOie8Nxm/mK3hdLvg7iBNxsbFn5mYQsqUSq4pa8COhum3eEPWo4Kgh/3IzRNaCDKKkFO3LP4RBrFwu42D6lHL8ZIvud6EFwt6q+VXg4WYhkrtVcly2Sx82om9wU/3OyPOQKMwxeDaROFfespbrLZT0zHbZbQNVboiBqlVHYLfR2qAvoG/gBBggJNpm8uk0qipBliDswtPBGg8NRo9VCHhMtVnR9ADwPiXTS8FganQc4CnhwVgM6Y9++7xxmUlwGnPz54FMkWRy+nGL1A+w7ldx02CSVkQTnhdaikqV0KH2OiqZdvJV1DCBkJk/MUfUhUtcWuOAcWR5xWPEBRBc1/pktiUFW8noNE5t5zMbb9Hbtr7bblrYNjJ+eRMzpTpUnQVlWJdhn8LC8HrjZH18G5b7xso8OO0zfN2asoaupFasTeLv6Ys765HC+j8z7viSjgDkIpqCYLOy1NqUyp+yvMtIavEhG7exkowTn3+oweArsmBL6GChKd5ZYPAzM3DdSBUy7eCuNWeC7zXGu4hrlJB0nN0AV2irDSCOpN6hlblZ4UJ7+et5hi+7AdsqqmAtdJWrgyL041m6I23JU84yHnLpPNSteAVEpvKkcmow1jrTYgPItYNkXJy7sSQxOODwe5PwGjUo4+LTQ1DyGmJmCzMjmmNLGRLmorRUcVLVo8KAYajg3uCuVlXhKc5idgzG9uFv8fetGXpkvq+EhnfScvZyncL8qbQvx40D3YFIAZTp8VuvA6K6mAkJMs5eSoGnbfy7foRAp9FfZoAkm3NM9UpXX4DZRFBctV3lw31Z7orodirVnFq1DFcvXGNFQZ70s/8SFbegDT3mq9pIQFLRxAJxQPwEYskMF3VZXMjxFAZ4/TmwgVO+XCR4pJcskM94gMxKTXO/s1L+xy+ja3iIlWUFtSDJbOfM6+hKeU8PKbh/qX8Eghivl+bUYEJl1MKZx2m1qGi6Z7s7upEtIpGegGdgctE/lJ5GCmQveRo0ey8/2kBNvL4E27O12NBigkiHaNhC9rqhIZcn6hz3FR+lyfH8hmQo603GIVSMUiVBktaDICMI9WyrbYVOo5wT7yEgy9LSw+iON/AiOiaY/zr5bpJKi4FHkwk/IMNO3IT8krd5OKCtfyYcoPo2ZjV11qnXljj5zPuswWfotCcODkkncxb4o+Qhmd5Vm3biDauksavd71wiQEhM1N0HhMdVd+fBq5SDJ9puRWFpDbmtdlBMsKT5K1aBXTrqotjE7mFRD+kJkTl/SnhqlHwRVGtj08E8irAhvPF7Lv4LbXnryuTuLIMkYJ8uEn5JmrdqQ8RDfPDVjALdVOyzqd9lfoh6c9Is6fE4GFyN/i9FO0tdUvT/RrT4T7VVPFzrmTQdQPRdJPTiCJChn5+4cinhyP629so4wuAVpIceSoTKxrNjeHMTtzGQHlqgF/bX929r1b3gF5nrLjFlbWskXbMgWZVWUV6ZQQ3cuSWsiI6nAcvNkDZS1rAIU5j7Dk8v/LL+0P+DSDiP7bgwZTX8SlvfNrRt2bC6G8JDNlCXEotKdQ5WKQuFrTRzmEz4uAAOayCwR9sZZih/MTXPN6vVbZSO7hWws8/zCD2gFnCBYQ9ZlC69p9E+zSewsA0QjpPV/3SI74zjVxZ/xLesqvVpJR9eD3FVhR3X6zPJf8loBSIJvxEhSGsWHnKz2ALBM44V49XPcoxkVkfsJ0N2JNf1sQbPEVWXDfjWnPdPJKHcfBSOxkKE6VMavmt1gCEs6tJYsSLrQclKxgq4JyRhMTDA17Q8T7dnwvy8u/2BZ3oL/Zw3vGKL9Em/74kWBAEJBe9qL7CCRauucNROVzArQGXHNueSfGEz+VhoSVz4DzCa7MjO1ECV6JELwDCYZGNTUtqgDkDPczp6JnXpIitIuNUdAYp4UDztxhrCgtXcmbDczp0RKl2rSb4oXYCVJU3jSVJtAP1fJLjn2CR1GZXT+RH+vHek446UlobIcdl/O6fApxmVjGvhsMQwpxSMosmQvYbpNctNEZIrC3YEbz2Bdl2mLpeqs1fbDZxNdf74JdrQ9BO4EddjaVaYx3d3d+ANjN/0iV1IykLwg6OrNLDh/PsPnaSMDUi33CJ9fQsvBBu3Lp01sDPIHFE4pXr7VzFc+1YsXm6Rj/wKSIOrgkuUJ+wW+Yyhz8MPsnqX+hxWnwpbJXjaBSZHY4Cphi1rl/bK03khBSINGDYMkJEIesvDzmeitWy0OBaU7MMffaeupIuKtrm3uHP/E3NWpkhT9psbGscKeBm69TkwzwcQBjDKYhHJb+B5YNmfpj4UcNy/oA3S8quXbuRGFua0epDUWSjZMvz3OHiklK0XRnB8jvAWLfOGdVWy/2rcKqnulsoYRmTCG56QMqX1mtSpWBKa8EBxFPxY7IxUqutaz07lCIuxssp7byTj1uSr8LwFvOex441dBMhxlA6lW3klv/n2nemMJclFZFhhDPYNg15y3ZUgab1mcFGWiA3vuybYihh7cmispnMjsYaW7lTmnZoFAmkw+Kk9vaKsuoqmJdQb648oMkskc0HoU9yxUuZlX+i2Jfna6JD13qOfIJEGE9n3Hr5e7NcBwPnMfOfqErU7JtoYZw543x0jAdMlYn8ccfUp6SoL6JukBa0nCIxtEJGy+FSbqK0ReCbxFlQaeSOfMjIG7BLTSfFGOwEwlrs8IZRH/sWSlZ37TBmfhzju8crxML3bq0h3t9UVa5ByDMbAlD9Y//D670aYm7dLMcMkMovYsps7jvavWETxKKGFm9KMwoaM3SFZaMU5DdkdgXB55BQ8YgYQfMMqjYwQ1Rm6XIHYH8TELhaJv8BZr5cCH6fN2PY2mwZTd95vt14rd3jEJIAeguC0QXDnYL0W8S9090wDGggJYpthXprvCPG6tmb9YUJQ0PG8rISHbTUEapjiOmDcYVHue9y7uFrnV6zUFCER0DFY9UZQXiQjrb03PZ0envSB2quwjaGsTv8jk9zeHhbvHarYerj0+ha/QLo+TPX0cFVSoxKoa0Rq4yMopa8zppDG41bzCk5f5kKSnPxDGnMrZ5mBp25v+bmYBu3aivsnghPaCywtnKsR439p/kqpQ+VqZG4O/vDyppdHV6gUsCAlMQP0IB6wfEpSVZNZH+Im0v+FKiFeYs1XQWTYARmSSPZOagcvlVQKCBClm8gZUrFFRfjsKUzoWzX8DBQq75trRS+nmSZlpy5d0QzLm5dxDb+48i+ZKAWjAzIMoKrWhQWQeVC1EEs9z64IbdR9qGTNTb6daYmGQKI0IUGrFEZVz6Yq1u2vEmS6qyG83o+d06gRP1mv/qkKmRMWzyiLB1TMLIqLVXMwg8CfzgytF52vPJlJ+DgnbgOXyf0U0HoHq26viwMVrBnc6ZYJBZPltSCcVo6IP3/33B5RO3AFsvW+PsEUk9iV+jdYy4lOh5ZveQLwLkKbs7VTI81vKFGbjVBdwLJ4z3i8+CC1L4PXjLhSCO4o/vUhv74AFxFyBlnV6F2NkLb695rUrT5RaT9r+WYb23TO0NJK8JbOfC4NDMKhEVFRShRlrYyktamWspBhjSePl4huOeL+WLizh10NViQoRUwi41kDxVDcF2D8ATuAko4Fb+jhp83H0qd+GdL+I0PwzB8sOgoTSkD/12hdQZO1ET6tTVnAsds4rGBZrsTCEQGue6/RuVapf3U3yoOcEZ1n8AwKRRg++voIL1ojAfFEDMZNMzYKhHMY5EukbXXvn2+2PO1AHEaYy9hMzuzM+CdkGjgJP8KS+a3EaTCoubd/ignHiW5+WnW0QvrSpFhKfQUQs7mB6vo2PhL+hNoYCVNYZR+yDL2So50JA04Bg48xyTm2L38t9XsJmLgCBupP++JrdfCVMNwcwi+78dR+cwBd/b9HBAHfl3KGb8+siUa2MxgxQ9NZtIydnSrhKfKZmE5vEWvJUqmvhdymsC9f6fLZErf4c1SSTAdm/e6plHh1kdaFmQvupCjiTi5x3/figGjBYtYt9T+/BSQbHfQ0C8Xsbq839m9eY92uCbPuEOAl2sk6BxeN+HFUEMe12+1ZOOLgzNgsSHlBVsmNsFr1utYEA74+mK/DtlxWcFEO6U9WUcUPxDsx9wtlhIe781Jj/sfPHhEpnYsk4yOJ5RrbN62RugDOYNbIYCzaWhZjH43AMLrpFB7dY4XB0Xc/2rfXQKR2kWyMH8nsmq+Nhuz76SvN7rMmFEcowfr8hCLPxTHOKK9Yg75eN7/Wsagx23gwkUybKkMtK2zF4khJTIGxKobzYPoR+yb09oZYqvNOTeSc8Z7X7GAzdgAUs69R/pTtlZX6fpzzCuFmP9UUNZrp0kw2AAGRwObr5r8kxD7D+s89fYUm19sMFRREHpp66+vx/AWPzawlD9CvXkSEz7ltUkE0NjAAV8tpt0HhZ/BuEkk2wbibgiadLX3LNjKwFlzp2dcbD30oCmHje4+jyYKi5jsNK4iPI2jgg0YO9cRZqC2/XKRQoQlaG8FfbJxw7P7o/oXCKzbRllDaxGtanPvcrDY5T0xLIlDoN0knpJLC5Wmktzi+5VXd8hEuR9F1Wl6DcTH3zN2equH8TucHm7NhEQLvs/iRq0FOfY6JLgKd6IsR+xPTtA6blyiaQWs4fHUprJSH5qXY3s3eGTOUyBiiIHMz2PMNwBCPEwsP2N+NrVssJC18+jVETi+K8KfY1+ELkgY3Rm8p7mHjA3eXArjz3AZM8tEAWnhtS/iJh1IUmKkeERBe5BOCJV0dj5eFC0IBIxlzHzdEEfmgIUgxTBxLDfptICkycjpcAtZcqtM94gK2YciITfkwo2qXPdY+1ZBXsnA751OM2OVKNqtpNImXpzURX/VcHqShnocKTGUt1vBDd8ARsVO80+hzBrk2cKhAqmnehNldDxcRZuZlESWn7MN0EGLfcoSLIvULDlTFj7mvPXhtFqabnit6EgbXYM3kcvBqPKvXFw8kfHupSYZ/AZ6JUjJPMeX+7Wncq+yWKaKbJk10rMIOhY9g4o+t7NkdShkadKrN+0oeR/jIqfQ1wLsOSdMwyy7eQ71MLhGWSGMFwL20CWbmp3f66yVPObFtS00FwkFH+oi7fe1R/DMylYK7hCY2w+sd5oHAWowGO7zK8F7zk1jWiKMI/wuMJroLesYuMHmqXiY2iQqZcYZi94jff3mQv64VEXpomNEYqR0/1qF1GBj+M9ETWYi/+7OLLGnunyj6M9m7ho058RuKD7LFMbo02Ov1P2NdzyXvy8KqcJOb2p48uoj6ZP2oZMnltgAYLhIt/WwUDd8R+1RKZK744AAK/q1k+zSFGZgaCHtVSxAEuWhGt+AhT/969YmjNM3bUOWDTr79p94Ys4Qc96GlpBguIOTyZOqdHAGcVcW/nfUHeZJMKHES84u9hus0I4jszMyoYZ15g288/FOwJqdJuvTVzBSMs7+HsGtTQnJ41LWQrs0PM8v5789gthQBf2vD4LL1+EKEZ0t83vIkWvEYi5JGpL/KqaG0HZ8MpqVDWHvTPs0VH4mLoCbki52Jhl4zm8af0KTvju2uKFwctXSg87BjgIH5N/qORIzOPWDLJVmmOLoAjmAJHEPgSFNLNJPtE5RKSi9yAzNjA2aIcdQIprGl2QOg2mRNKTMM23LrRIE62lmvILamQyFQ+dkLXRSM6IFcsjkQcZJRTPUtSwwuM36Ly33stUIfe2xAOmZ8LxlFpzRkKNRMxm7qapv8UvJDd1JK3H/Tmy/eDgaPzY4rTBBczwwsyLBfhvKBYAq/3DSwLtqRSJQaJ9COcFheWKwo68P+/IKQBzG9fzakAhlmAgOVuJ7vg9KHg5dG0C2PA/wl+l2N+ERQBibkU8f8ju0W+EKnwirGUDId1uGkeoJBw92BpJOMT2tWHGIubSLb3B64FrSGtr7zgnS0f/0UeTuYBYIhBXVv2XNns3pyxoG0RbmirXeOr9+cZIPsMN007MqUgEPlGJl3rpfSw7t0ZEHdL9j7KHQVtgqsbdtZothiL+t2pBNM5j8VllZMbyLx0kObiQDIBzK35IHQgP6V/E01ApWYFY7LvQK5ISw2uanlw7CR2qNpIFAKcJtc4920vizC5I/Fu2FLrklIl+1E3hX7KcXjvyETwNHgLnCajxpNRElXdLZFAMXCScX6udGJg9XOSQeK58NRxTOFKTkBUvDeuTeC2sq5mGihslHhR01lzZUKu2wlshdtkttReY2z5UFOxkpUGFpDUe8xlYA+sPINBohRYVzjOK/0vwmmCVuOs6vJRwN4TQVEBu5qMlbfuJKLopA91DNTyrn6o4GkFy3SVGnIy0KbBQML7ojoAdf8XPkmjceIoBlO3d8gZg1Ilvb8pht+XkPOxoJDih97aIQRU6/OfP6ReqoIRHfOXZz04HS4zEy4WJSS3Bt/XIjIYt+PnXrd5AywOoOqID1YVC5MdXsrGuDKaaNn/2gQhHEaB6mbPIFGBzru3jHvuJcNetMKy/8at7IzupMjKk6MRSOGRF+FgtRzv2ABZQlD4XXdQzqz5ooiyR60vv8ZSRFhnqma6TGgKpIXFrwA/QRIPRjS2byIHgZzJ9nq5ripYHMt25VSamwFaeovXRLXDIOUyLbXkF/J4KlGUpmndniGzqq/BmZ8TfdLwllhYI99S9ikwFag7iJQFOnSWyXFAD9YJj6MuUoTKKroLaXiV5WYUnCzpeOw43+9iAI1eCOCCeGydYWi1ayiXPR6mZqGlNvVQ1O18ESTBiWgM/h1SEBO/J2o+2CtXI8Rnpa3Ny6FznfhIYhMdCuIG+6QEy+YJDjvb1DjMiZZaFBvUBOkXfF0PKLiWGOTun1o3P3qi4CwHSfEU/uguc4MDx2B1CgAshXj+Uvs1MQT6sRxTfihDdeNh03alhXn2hy8KONKnpwjm4l9ZEkx/320jcnfIKd4lRLnyB0DU2PUom3p5sGoL/Dlg+o4nOYiNWnF1k6sU7BurvJAMcEZF+DolJhr7Ej5gS6Naly3QmoQDmKS0D2u5wi/Ih7A9D3hqBRvdcVgrudFT85oApNmSK3/HJLc9kWzRxx7uTI1pxAn9KlyDfvVt1SdILqrGkAeKsrLci1yQfulCkrSfw3cHo6w/+bDiASAqkp2M7JdS6mtgYXF/g14ZJA5m+vp4u6rfwmJLvxO01xh2DK7UvkTOn6YPNexqZakpG/IRYsp7ul0cbaOYZO3nfoBNGclvqDntIq3tmGjTs8OYdZGaNcVfbaUBjWJsD/vR+vyWapjhzvZXVeY3EJtSBd6RB21uXgVgIjvgbxivrGEXhfOnG8CWNrvUiVMB42F0RcJNQukLWc3YgZOcklkI98tISq+NeZ0I/5NrTKGFofb2fqqZD8fk/hGd+l90KLIHB+knkUAdWgTMj7VPiKyaojrc5WDkHmFtBKGcxyCInAAxJx3hzdtF8mi1jC1LprRI28Vi7fGVm7O0nO7ssXjkXBELV2/YcTHVfqZCTYvsA1HRYJxGRhw8lSJroBoOGX7izmG9Klh07FMyNgywWYeM8QyJjXTK1RqQMGRn3lQJnqC27Ax8svmzK0h2OBLzupTKsIyT1nl49X0ds87IEmg0ZbNlf7atFHI4pEYpwWgsz6Vbm0FESLrFbtpo3uOKxobrFstmcjli3riPM2UWyQL5SD0g8lC3ctAI/xg0koNTwNatdAXJfARLF7JNL9CfsOBZTSig+3HtWDF8u20+K/0j4yUbcX5LLC1BgT80Ruqlemq4T0Xod1LWirPNjNKd6BsUml0andxsnPWg1zkC9NYiPfVHfpU85rRqHU1u3iIn0H3bx+pxQhUPYsFBQ+n2iq/vp29EAHeBUhBXmMZDMbd9v34RP0bJQyJ+ziPnQCEy1VyeRilMDcCKzS7yIk58Vrpy4Wh9NQjs47l6CrtaRB+EoLdx+ch3fbU5OhNdM9TVnLtu9uIHvGWTwVeNW3BgYoRRFzjYntznlo6YFKxWa3Xb/QcCm45xZ3QkbVHQ3N5FqXpBdDlKh6Vf3dCgyP8hnyF2i0MV4VAJzyTOZNsa2qf4leKIe765mCS+rC1rF8lP58wbjx8aABs8CwoGJiOs5n8MraV82idB7Utk1JhmnWidGidmZsxaavA8rWbBaSoe2Rn/tfdxXa/m5pJHsJnxDid/PDG8wvLU7wmvCszn5JUWk87FOGUPJ3S4LtmzgWkO8MPFULfDFBEswSmKnZLwAGHs20Rmkdny0OmrgWOl8ssaw6Ff/V3e0s5vM7p2bwchw+238MLlEPmN9DT/m75RvvDfB/UwMbOjPWo6CXgMqHwN3KqmIVPuY8hKBJCEdhqdp4oKO885aXT7WbSyBtSH4AoACAN4nVb2upSX2A/hl5mYU1+SfaV9fQwibBd9frqlXriFBPSFU9hdA7thqZB0LYPwq/VWasCaTCsgzVB3IE7IlUG+b5kvDWnHFYvRF29QHcBiucz7i0KJUWDHtuahQVXbI7H75WIzUgCG67FZ16vvWdvcfRvPVa99Qj1+Q64UXZ2XwG5WXGYPXkbMPNGorfaOHsNYevAbCwRzFHMeVgQJ3twaXzqEfY+RkIfcTF32fZX/aaarECMClq9REhZ9zUVYtFYT9Q0/D4K57F61Yk+uUCASOR3LXZlFSWf3fH1d1GA0O9y06mS4dbZ0UJCMi2wPTATEQuNbUz0xok28BSQZiDAe7AxiXIpLnbEdjCnvuhAdhEkQ4eKW45JZgpUx1MnlMpewA42X7CKPXurmGsqQapaCBKA79qu1Mz/6ntSfDR/AwHcImkofeSSSrYmJn0Siq7DsHohfAxOdiKfDLxT+PjsQZ5sXDIEhus1NXZHwV6+OCr6QrJw7V18WXADOIBD2q0ovFeIk8Fn8DPCqvO4Qm7mCJDLuxjYr7DcLGDwPH6RrC8VtmnNslf/l6UuGUJbkM6+cpQdrJbWeQGkTQ75WNiY/hcGBtIYBptAYel0hQP58rV2roPLU9Cu4qvjAyWWMpOpgvFrynxdzLY2kOuoG1Twzge4wi8ojP0eYkRpNm7fMH+NGcWhiJemKUZoP/fQEOTH+8GGAPI0YPxz2nAbG0r9ctnr1f13XmpGznJ+2Eg5IJppuWX37oZ1JCV7V8kvzhpqOCWiyvFrI3DPUwTFBtM3H3qF0yU5jOV6ow7jk3uBaEFZkkUjMHRioZq65XHOo+dlWeORIjI7nDpwT82ccnU/eqqoxaC8FS44Isl5MMZ1HHSvRUHzAY4XvGlhcgjkCfXxfON1QOe6iNuJaqiGZYh7niUjTa9lFIJ0sZ8c5CFSBRPpQAtzf0KuB8Ocht6s1a9fBfH6B3AFKviTRaHxjQH6856Y/T0xN5WhLcxLE2KXAEyTbZGofvHzijvZ8q6n7p90XXuX8j4f7jVA7xXmI/fG1M3cjl8zuj6hpMgIzoAVciCLYydnhc5WwrEfgk5Z7LFMpp5Ue/84iDBDs3cYvtnB6bjtB9jowrviY9d1tSJARSYgi/GYtAf30IZajTK8EXjZkdKk4lRuHus/XGYdDOlrMqWIJfu/eeqTnqKy3PhnTtbJ6RxCP20Iqvi/Udmk2DJevkIJ1ba+eR07LHa/I+mTF21R3nta4MVFumrAC/TKO75cmuZ0cDyGDMqteu/vyXF2FowEl914O1aX5xj1DAfcqCwiBFdRHE3+E3M7WnD/zRKmAMEcBOXW3hcAjXwpmInoSlKzJj68pGuiIB5fDb/K3RgnPRlBKBFq40hdzEN20JLgo1ZQohHU5gS3x0p19QKpBNtYV5qDqoyePWI2dA805Aref+yZ2yXfc4NrG682tduDd1E91LWvY7Gpks5wW8NeGMLR2jbwVwkxnQSLg/AVikHSTfFkojXU/pguhVHXGRH/T76TbEcZYMPYpZmgFDXojmGbTFOCa1dlVbLOhGVp+Ast30fUMyTlICUJEbcLkWdsKx0XpR5Y2yk9hLw4CCM2xW28ENPQYs/z5l2Fsdh1vD7SND/nNdAKTFiAl6uIYEWqtFF4FD4r2TK6aHqCfiwhgbcYuatfxNdSBdRcncQWk4ByhMYdoBf43X2/PODhHOuck6QB/m2uqc8QwbNBlqk6I8OcsqqPc7xYTSwLzA3DEpRZl7/iGJF9Rv/JUH4wsxdb9QybTGe1d4QvZgZE1VPpykGsJm9cUEWZeyQ7OPD0dMcg25+QdzDPU18eCy/YmSPj9rJPOcIBoGUDToV083941AH9/pPyOsNGjCy3E5YKT4he912zhkMeU2Xq6TkP43FId44ooHeO3sQY1TOomQyhNX2gejs7kAwrZXaemXDQzMn1zBREOATrdLzyavWRabSS6tIN2r4ZoC1KAtiYmOPUVpuwG6pFpg+73ZsAjnifFsYZxu2tC1RsmEMQJqob6sYf9BZRAVSKqBu1PMZqlwfBbMsu0J8WV7dXzqHM7RVbIboeCdYCur3D1duBmvjw/iPYqc2C1lawX9oS5OyBYlXRB/244o1vCSLoObJn43TY/KExJ6HDlThVVrLLxXBjcwISAts5sFV9Sjz8pNGy7jJTW6yT0dIvoOcf6+wsxvtAL4UpKOCHnAbPHNvTY/FtzvjtQHkVJmtBhuGeVg7kf8LROnJYTJ2Ul1FgNWNnO0n3nScSFoNGtM4GPPGN3WAOVd2M7Xp/erImPWjSnvMedoR7F84BAFHyLqh6Dp90fhPh5UN8SR8jDL3SQKm83ClxYoVQnUxzDzAzsuZxOAGagWg75H7J1r96lmxQCHriJeyKXawBg+ZivO9J5Dil6qwRDmKISSgt7NVd86xMp6rPLAv7lVqFOv0bI2iDBFCpd1fW7hdiwvOp+nJHpJx2OdbE+vDDFeq+8hYZ9xk4JaOnAutmNNY/N8iw0OTvP18HlgPvBv4EIdCHl8PXoAhepHyODlPqVssfmWd8YlTzF20rMiBxTBH1jfZYZWmLd1+rYiwaI7nBqwIsquYR4JsuBkU9Bn9G1P+wmIiPE5RCa03onSRhdR9kpmguX05mi5YISvnfdp7kjlflk9bmvKNKTJeUoa9CbhugLOiD8pS4o/pvPOQ9/VYeSsYJ5eEeqE4Qjo2bdsL4w2zX4ZiCVTOLwM9O5UWAMXbXll4kRSVjLsAj7XsTvcCKqMTOivczPVz+ePLMAAoOuns+cfZcvuV3mFkg9ip8AUnhi/s5dFKTT+0NoNWd8TJEHIwQd4S123EmrFT5tNHFXdUskji7Qa4EJkIVC+1EPUBHxrXOGTAPOE2cpH2xzCCBSH9lsmhVU7z2mCBZbNfBCHxfXIBy+cpYjYobtOCn2QO46oYePOwLr2D1iIuV9XAsTFqE8/9DHea2DTTDgqjrqEKBeICGpJRspqdkQhVS9XsWxyF7qfUAAfAUBd5kB2Twn59iu0uWGO78LA3CYis/+OuBXObzeijnXnloruKbpQrQ+/5YcLixGn5StmKMvPjSLabAnl+G1Q1KDjwAFFmNCYE7plbwux1tcssNFLnYpknbp+j2ddihfs92o8nlcId8sReyaLiE/t7nElUeDsUK0YUsgz8aP8LFD4YZrqUT86z3dzjmccdqZwXy8exmu43QhbYaanilP5VxvP228ytIN0JFv+LC7JX7ofYkAzfgRJ04+rBofMSvmwZiA5V5JN1i+/mPdQxavQlLbRr9hqyJOlok7uRLtKZklgaODMnWDspaqo72fAHaE3x1NE4jRuLpag9GxINy4vwahO8rNKXeWXqfBLET9gZcTJd9+z/+w6P56gJa2JIXKdk3uAGug3KhjJcBEyAwvw3lvRoIEWW9JEFIGQjMGk8QX4kVeCND1y+3x+6Nrf1keGVW3edIfbcA5RmiV92d+oLcey2b9MNEIV/YjTQ3iYsta+FIeT9fTMrQXBJfzcQRNu31eWM/bzHQMZ5/0432B9TfVhhAP7ypXqXn7UaEmurHL8alXnxhAu19noDe0mno2dckgrWbozDA23WqRwS3akTRrH1HnMkknzFZI2jJCV3mC7UCsNXbogyBkt5X3xYEetwGcN2qUPd0C4TUlgOk7JT9L8cao6dBri+sHK452EgUwntiR05PrZsDSXHlxR5H8/Rgqol4dpJWGI6kZZo7ov7mCdpFnvS0T8mz3DsHmT0yu6pMd39XqiChupqtfzjJCZIT7ostc4KmB3TxmFqSIKCLDajBDiqLrFVajcrbqtlRl2N8M/DMI2wzccHhvXBi4zyiO0wq7VBnz7Hm7Pc92SWIqcKJM2o9lxBT+tfKiWBnl3mgtD+KezHmHrD5Oniy2ScU4TUg8vIjmQE9vzUwtqtaiCI8bpgZxyz6X8amS6zRo4C8N6rvAtsvbtUeIcv20t3suMrbGM5karbTPLW6DnGtivZgSmh/zy2eX940DQqv2SkInNLNxQk8Mago/5lSD6pqVDhborTQ7a2WANKiC56yXCTqPuAlSKaEbnR5MeC6XDVVigEM1oMpX+MBW/XuzYfv8qZXRoEnxHawwHrJ8ONy7Gc5+SkQeEjXPmah06odMWqAIVbV8KFQim02l8v+pu07yo1OXioO3KLFhuGN5FRJlQGXL6u9ha5UKwv4RMsRaOVKM7ZzBfIEgqvlRSnzQfcstoRoHyewu4Azbom4MyZe/3J9dyu4TN3bNGlGpTC5qSoSS6X3OMx8TVYiaE8Bw4iTPf3w7Ak1gn7YRffTQs7BK2KiVK2tR0yql9Ue99PtZf7MN2kCGkvgEIX0tR3Iay8DgnFMD9NBf7yGWuATO8MJcPtrf6O458VqLAIuoz2N6g1NxoqO+gEXgBzeZBX5CTAqlFpSjVzHjgG5VuHhGjODbT1liSSY2HQS+Y0Sr6tgAAAKOpZj1wiZJ+N5kTFEWkwez6c+aZ34ADYt5FxRIW8xRP+WFFEOVC1aBF2HzzcdCpqBU4FnEI1KHymapJN3GJb1ELaCmEdykpOS0HNyg00DkJH8nlWiHCdwDjYj8J+Gq75w26OHAvvkViLxNKlOWoDzHT0b+6krFzQ46o8Ix1G89s2AAAANzggAAXY4YsApkeYg8fej+NofJW4atHL50wj5xXu2VUcsxkU20dCFJP8W5kV1ViYsFKIsvZE7A0J2toiTeN1WFvip3+20c/W3H3UB4Kn/B96GMqYsk2SS/TMNzK9KXWYWMqVBR9HIUula8QXklKu5lVnX6Saq4byG7I7p9IK5lK/i+nNlW/iCDMQW4H0P5RmOFI5TDMEtpsftS2d0VUf4Y7v5j3u1hmWWbbN6yTdmB5EfY0W3foVOr3+xGR1mqvWKwiHPV+/pXZ65Vmqd0ut/lApnlhSKs2yx8WSjOjdlbol+wtFhW3pG6aRbNSqlGeStyh2eSVVTacsClvSRJvtS8gb9YNPjcsqYhGhWFHhxkPhOw54mAIPTdOIGZtuK+xjfZMkorTVJU1D5g0luXkxfJqt8Q+FxLSSXolIfnvBJK/lXcKuiyuyHcXutjnKkLVzHGagoRjyjtyXZHBfoJwb2/mvQk6/LV5L7bGVgX5gOuOpvevK6ty/gU87h/Vwzj+lPIues7encdpPFWjqUZXCQeCsbodUECkpukixYBhIb6oYe7DRVyXBPrkPvqcUpdx3lK+eD1jH6jDpba9MjU60t8cCF45vcNWOt4d9/CuamgiPfSW1O/lRukY1IH4FITRBVxYN3sgMW2jeXOnCTCNAO1lB3CX27umz7J8iruCsAAAAH+SlLmMW88jk/kuE8dgAAAAE5ipf48NnMN29rO6hVYPpGU06IY3Vk37i9C3KDEIyv6haqovTtlnwV+QbT3MZ2eIeyzP9R2XAhbKEVPUImLejMPMf5dc7Y9WlBl3RLYA/K3Y88jT7nc37bzOyGbNoCZfAKChPGwmdmsqTKxdFMTAotV+WyVzJV6UGWpNEIeNqnzkRbaEwR74896618UMRy0Kwee/7nFLrnb222UjWnTE8ZxIm0TMi6FddObvp5aKdUgqqpYhEZJH69dobGMCd8cQcfAztNaC8JeC4rPbWGX04WVZUjpgrSn29wUtUKrKS0kcNSnbOlgaREpZ1xp76unUvuaj/w5s7mu/P5cMZm9+pz0YgbTfO7+8faPu6tgXMZpLg9vasYZofk+3Qgr0t2Xl47+4wpJzwdPq0kXSXZySi8UGiZfwewAul+LwNt0VNdni2r0PcQC9adjhoYf/Aoy6UWG6hdgdiPuL/OkalNGRqG87U4uRsDf4DlkSJv+HSC7spjgI//CzTsldB14WXPIK87MsHHm90KmkTbE3Od1lzb/WC582kRnxVlLt0bSAlKet/VXcCBORmoijG52QUNs975tQ78so7dmC8ZqeoRMQGi2gP628rZGOEi66eOoQzNMsiNvAETY7O58DIL/lByxw/gIZZaEfjBW8lLZgZdNh4SNbrcsa3i7e5HFIubtBqogwJ/PenP2y2P1ky1gPtTnEQoSFTuRDm/C7cm3UuHPEifUYGRBev70rTuGgJZoZgUk2i1VTEiX2kGWiC0GX8Z83irVRcaI73IzLQUu5avR9mQZWrE7wkaYAgy3oGAksKvMNedpRhs5pvhH0DQl6WnOajb3raZ+P3i9ixMzWVpfS5xiDu+0dYr0x9yp0S4yXUbtZONCxGALzMqeHTofS4FkxHNrdZme3zrrLfSMkF37/YA/4mwqS+7tXiHRVwGXszDfar+2Z8tFg44+OPPuIoA1sLFuN4JBUWQ1S3bjlLoJX1SSNjWuaf9RMziZQ5lP7Xvhumy/pWZWTHsGMciMup4p8RrGWGfSqnEvy+BPCa/dhETV2mt48cETQDz3aBMdZ3nnAy6tjJOsx8ZiiJ64wK0asI4Mv8fhVuHA2MALG+tO+gLgdiYgLPkLMTVkasG+BjY/iXu9ahTRB07s2GrupOMOlWkfIk5CQuIp0VbXNGlhaldCVY7heXDIgd//n1Scb84aZ5/aqqVw2PV7k2zqrxzNh+bdYcfvnyRYoAzOWpfffNjZ/hlwyppLZNqaY3EW7xci2rK2+W5eF9zDRQqu5PAbafeZKJtGpAWWWdcCD4A0hO1ZI7GZcPUJiTGHTzP68zom3/mZqWceIx+c6qw82DM3jVNa2YwSc4LPTI2dPOGIJsBX7teZo2wi9FRD36cSEydezQyLmKCmKuhZaS+rs8Igvu14Mv1AtiNfcpgD1d+dUeo7iYNOuBV6c5+c/EfOymB3zUg8ROQsPNJQszgMCO8jHFdthIx7mjzbBCYVVx7Mr8aPpQfU8smxZqqG0nZJA46jvVPAJUs/1POqRtyksM5YxwOBQXgTuyu0p2k7VaFOPMrP3Z5XLljE5FczCKwLgniviM7PIupHbTgSNQSgWANtoc5q7PP+abcnISDCcDbkYB0jAOCaSOMfuiM98Gy/32nMwel4+C4NqwlaxPx8LWm/dgPOzAOSroHdqBIP09UdTmwKdVafhXhIjXze0nndv8OfFkP5tyK9TH/UTGelac224mQmFvrL7dGK2fyHd6Inug8CFsgMg+0KTndOntH198VjrN7o42rYFizM7j6SpqpYSi9EzJFPQx0SZJ8lg3swLQZw86PFjVXqj8J9ZljuuY1VRakJyXlsWSUfD24bODF7ivRmbofIHY8Ebe3bjBX9+IWEiBXdYn7F/jKj6fGa/ib/cPDhaa7Cm5VeGww2on8OtUQOoDaw5D5IYYk8zve/XUHrvh7HV3rWa67Uyu74OCNpTfb4HtfGXGelCUyFettHFbvFJAexPHEil6PHu2G2Lf+wlnY5i9HuFpw2XhHkbUynhdVDW28ckmW4VFrX9HVrf5WfPLyi+9VZvTrRPBiOMu8RBctTodfqLkYBLv9osCSZifSwRuhOQMkxIhF4uRL4EmImPp74B2iuXic2+L/Y93fzEl7s2pj9txU4XQ0fA2ImjJ1b/6uyC68rwPtUtz4k0bR3g3lPTWY38NYOon0gZLwstpY2hH9iT8sevsRbZTNMWeg5E4uYKvHwD8KZNBNLoBPHeICuZFbbv6XplMPAGTga3LF5u0aUa72LoJQIWAcd9RL5X4AvTuDMjoTd5fc/WVVsgnTFPOFC7gyPIXgGDXD4p1+VqvlSaoplfDSWkrej6gvIhT6/ZXgO1uGTgqG5QSAN/Yk5PApdY0yWTsVNcrvK6CXWQSNduWouK5teJFriL49ZsX57BKh/BYhMjuLffV3DwJ3rHXIzkBiy8zSHHMEv+Sr36q5s0PAJ1+JnInYRGHVg7oRtBdI5qPQb5v2oC3v0Mhjs7AWQkRAwVXVbNeqs9w5T4xeCQyUR3CmF/FLWw8ycLPmVeJId1DRSwElh9lSwLooibxRuOM/ZUypIHC/0AxVX+XWTJHNHMbnmamuXXs//H1vpEaOmDnPNlQpXM7MJ3arJQ2QjG9djcJOzFNOauelnl6wg9HtkopTyaGXn+vjt3MmrsAdrhnH3VsJPA8jVunAZ4TDKQjk8qUY4wbyo6tNrAftSJiFTLGBSwJmFRIzkqkmIemTCx2f7i5BLM12vGg5E900XaRmbsamz0IKNqqmJzng8HuLQ7LO34dTbm4gonGQPAkjRon3ODgyNzSCxPJW3kKiACOcsJcq43km47dsImqtouyY6B7948pbBa8FoVSGouHNZ07TAurUObhuAVVbSY6QRVWsWDOfEV4ff4ZwnmGiHbzvGu7We2hY07j3IdaUYJlsEMkVPNjxNDBG3ZH+Ia+8Ron4ei9hDiMAFm260OwtomzlkgqFiqchi4l0ZmM+c6ZCSxVAye9t2lKGZOGEUViSgKXaMAaYaa36zeOsFFYoo5j7MK9vRpfJ661Y0iPVzZEWWrgA0Lh0oHJxtF8n2lRoPkvQ8Mo9M7SAj0ahMA3ms9ytbkt0IueK0dEixX8lFIYXSl/u4qxF7e0Ttdpypy4g6WbrDRdgS6dnH3eheeesNA9KGrRPrHPGo05vjUHgpzislNLeDbaWiZ66eYaILsgIa6x89Ew/Xgfe7XX9tXZtuNcR7NDArOrz2a49f2P65wOdA984H0w1KaffN+1J8vi9ZuGBjVPopC/XB/vj/DfAVyVyTdTXLtyHuUDcJ151WrVmaVoT2OFmffwMb+x9A56TkqHJhoyA/WPlTV79SMjzVKM3r5CJAj+Vk9gfRgrGHUF17qmCXh/O2EMO5Wp8EOW/HVvLeJmjMtF0K51SMmOJx1DXv0TnEFuh0aKWrEajU68TKqTGeKkGjc9qXdv8SY5u3TwOSjUAL/cizej17SkwzolfvDdvjIMCVspbsXoNTaRsm/yE5AMDlfZr9lZkInx6Ghq5WIEoOebcJe0Y/kN2e/TMw1GDZVocz+dXvpA4W+3B7ueVTcMQnMU9Hm4r2ZKd8TYWRvqMa6wXHRKteZdEItuYFoN7+o8lnAydixHDcL0UjUaocMFPyoeUfaCob1lKII04pmE+YucjszxjycXBE30YANaWHDMwJcdXfgbpUyDGUBqdc8WR6jwobljDYYCcpUvSn1RJqH11aGPReqvj3rJwgy5oVAq8GCzRpJj5f6m/vn4X2iNTNPQ+ZjrgodpGr6OQzKvMbPX2PnLgR/3gJfV+1QkbG1HeA6enlA4xB1y/KsHU1mE0ZL3r6TOflY73t4olAo6M0wykjJXbmXjmse346PSaRcW43WuLUJviTPQem1xr1OGMDFPDF9kujqYpXNGIq0HCXK7cPeA4t7obwvv+eALlyR1KQsDnYKnSUNWRgEWKWXHNSw9ibk01SmRGEwI7ZfHyEXJwjWFWx6I3UMc6SEeJdntgHSlxqt1/vfSwIx75vgHXJhf+adhN19K5f8eXb5/lHnj8qA1q4bm+PUrZBtfc5mqqBFu+fl6l9WYsG42yGQX6SjF0nGN6LZi6PpMjaJaqbFhY9yd4Zf+E+jKoBUA/jMjO1jnMx5JDg+HG2QM2Zypx3UYzIOuOmYkNZL2c3O57Kk4LFQdtfFXSLSLzVGk3ccnydiY7dtcVII2OB5Et+IJbUBsbEzHjZ8iSMLsiDZJxqKR18K2klS4tYpvTJvUU/352cs5PqQmYG6pL3ipWMv4AoDJFwyt9E63gEZKuQN8jZ0E2dQXgbfWNqcEJUUBNusns7tp6OdAR0krd98ccqk6xyBpEDK/HoakgN4SFyxYu02UjTPRrxoE4cXMbZOgTmvxAtFp+whU0toOcP+YyL5NkV3bHVizBS8nnpJoDvqYPUtdk2uaGwXUqokrg+/xTpviNH6frBPw7A7l1u2uIdPrceA/Fq2VCq0wz7W21f4WRAcRrIRkazjkMkTflLKT7N5eWLkxhlUsgKXoJzs/74wyfa+X9FRFMUK5nytM9k1feQtpnDfQAq8FcDovVz9Co3dmDKltQ6VfGNChc7/41gHzO9dKpwjUryI85vONBFcTJ2b42IyvYelSdFVER8mq9rD6Hp8TRd4/H/MCcrR1ik+9iqrQyCg3GzXe9xuEN7sCLFPn6QQ3ZQJMPBVJJkiUbA2DXJvTTOb7KottKP2ZkQL5GI1lT0l71eKpjNoVelPFyy/73uRPnN0AQoQxHL30De20gKLYn+gVo7golcW0ryjFlU4PVycstgLBCPPS5sOSxka2g9zXZCmkL/Hs/le9FGNeOb9y2k2VEmtd1KoX+DcS+a1wb6E3/Ud9yDc+3WzQfVeg1Gy3nx3SyqVU5qf+FduFYY+C6zODnkWibPrtFCtC+V9DQScRBUrNkQQBoew+dUOYatifxgonMhMF5Ma9POImBeCiUKdr7JTJuJ77hNa10u8a5I9X21Rj+PBAOMk1y91hunBWOBsyYRZYZ7f/jENe+Ixj82OXH9F3JUInLb4OQgnJ5rWZ9biNnry8LUI0Jk8eO0MxkD84D9FHPVPtuLqLKj1lxkr0JseC3ZstkFZ0Wpc9cHBtq3R102QNBg+1Ii3AyYHg1q4rxY9rXkPNmP4syZnIEtEU//qwMioQS+aBl0tkhT1p+BpAj2vk49DJ8u08g9CvTKWBFQeH3ZEp8SVapxuqhYodGD/bFkxKPLn/U+ZbRJ6IssD0WyXweQDXAnvLRZxi+MYzN765yKV8KcJGcwCSLFDKpFU++JL0HVwvx3FpC9n4jDg/ySpumDYONuTlSmUETDJ7/RowsyGjZKKxZYGpC02Lmw0zY/L/RxvNWXvD0cJhWAurBe50kuHw1prMRxVpwkqHswTprfH0yHTJo7qtmhaVGYBnHGAZKqeosOW7ISBJUjjjSz9F5zYcwRrzT8FfjYj8qztN9GFJPNPCclkV2XVVTBND6X4Bd3S0oZ2QN3CWFxgUkCfCJ1p4mI1dohB89PjLYQ7WCKS6FNRonMrNqtZZ0bQF/8rubCPM2hYyjWYBcJGtE66EAVRSozbMmfqCEOANLVyntxwEWMpVQYTWKtmcFgA0/vhLqVofNVVjp6lRAVVaEVsuGOu2xoJ+E9w9UX7OyA9rCg6KLKYhASaW7Gjhk549XGWtaljY5C7xUvxEuSqI6q/ZLenZLBdn7Z6zk+Y0W6Phw68q70UUydjdW56slU5PUz5FPq78G+V2eDzJyMGCGWylYAETQoVoTRcwxkDZr6F3b1EZKrDmEqBLtdKJaI94lH/GkWJ/vTlgIKZBygaQ5QtUP+Ung7pVyDAFqf9w57QCbxHA7FPWjlezz4GS4YsDLIt6ZDU5D6tA+JCkOQZQ6R5DSIxyR1JEab8hLjYBRgRjoSV6XdlbpTeMlfYQmEU6V3tByChKe6kry1krt1RLgIA4iA17C9x0IeiEWb8mrhjgt7kMDUCsC3IbKWBMAU7wZmUi0U0hed0QmuzOpoiEskjAz3cLAH60WyyHqlKGer8AKYr77YGOiBQyUil2SuS9pBaf+rjLnh6EywpFSixxto+jERUfJjXcvCiL/9tmmo0eN2C98sOYxzAAG/pKv4+wA9S+hwkr3mZMeuVE7FPtn/XXrsZFs7zwZpNB49Ih46zh6RttXMJXzZWtAwi3h2vNknwDui9fOZZC72Ow+/pSjEN8yTGIw8+1zk9n3BJF70O0MQCWbHOeabqhrrML6fN19S8/1USqF/pjKKfbSDvu82nEZ4LkSEi5bb+5h3Tpv+OF8AHzCpfgWPuk1LOCOEukyK2kR2SXAfKthHN1qnhgxozL9ATHnUYZQPKx3N8srypY70fPW6fmf9QxMzvbhlJFqdkaNRTLe+G4k6z1H+fJzSSHzVpOoHDPhO5+ba/oKuGf6+BWekMiH41MxIofbWjM8XuS7gSGK0XuVwK9jY7FCs93HqD86TPh4HZJZerXEKCy9F6bVHXcdY1IoOKs5mxULxgrUj/2uaOAw2ffXtgNnydBv1Fda2nQKGTG74pHsN4QpqSTLmEhRjem5cuAX4ONag/WUW+yXAEB3jYCM210fhyGHyjAJ+qCW4vS2xlQRfNVB8DxgSSckbjMQDEv2nhVHQz/aLfdQALrvE9IS4bkjCxVVhnMIqtz/UemI6oO2r0joKIlkXhfjDj1ZQd8hX/uAPuoPhJknvNPdy9d747O4sY6Ssz/5IHZSgCFLu5W6AwpapSBuPAEcRQpNL6Ruu3EFHGNjQvXFqLFWhIbUS5KWnfeG/GYjveXuc95LCIb2dkNXKxypvBbtxxbg3iDFiVwr1k2K/ds00z5uabi4CAltN8nGfrhSK5G1TCVhrMiZj7D6R3jnF/NsvJ4v/zrflea+ccYrzlXKVSNsSyeCIuatMgRJu/Mq/6hTeLuVpK0AwkU1zNFA1kfyK+j8BASThUaRv1pJlZLZPskwHEEH3w1euEv6pn/Quxe7c4ca4dtcoPU9EgCJ7WV2ZEPgPy4nRbx86JPX7mFQjbr8+lHLiTm7dJ6Yd3FMqtmqsBAYrzauZZP7Hp3b6mc2Rb8si0eu8FURmGP0X28QuJhLiCvCrxkFqjp75C64Jod+zSVkNJ0wfLpS2GzvzVkjUXet4ZORAR9DPkaoHkTdt79Z9bOP7HC2W7J29u36T4GL5wla38QEu4t7CVTO6XvnVvqj/RMFN/GnfNRtbfTRQWKfCVMXpOehx4+ZPVgn8LmYq8iB2S1Y7ZnsMhvtP2CG4PbRXUwuS1NyhqkuQOd7wjyF9ipC0K9xhg1p72c8lLgRPssAFztnkbEye25V8P2SZxwJvv1kuzMInspKuiayrw7wecfEIXFloL0SGVJVb+NIQ8gN5i+KdEEvxkygnSxQX10JDrr6YnYLznOnQ01TqVJHVz9Ri3mHxxHLLfoJyOnWbDHwAd1gR3JnV+y6ezBFTNxCo6dpBdZHrHDuc4HM8UTER6SF6abMr3z7aEXbKG0VDZiEmuvsMh/jJPkd4oFW1+cpxJwKNym3ef9fk1YjIBq6W5O/IoxLiIqMt7AN9KV8PUFIJViFWDL/pO82pZF6xXhu9bwIFu9lpWHBqrH65ToPrh7+NcpAymb5tLNHEPT1pvN3A6kIeZT2dhYgZnRB5IFlxA+LlAgoYG1NHku4XwdpbCyMQMA07x1M7/Q8e9gyaKvu34e/LO4s6XzF8Q1Ds+QSzRyso53ZOfj8JYQOCffl7pK48t87TCiqA1YQ5lgMemBhUH1nbCnWOku1pN158sjnfjErE4vGey4T9sj+/3XZkjJ/vYv1jy0jr41GBNNDxgMihZMRNcMuRYVEgbEo6jZJc52zeLbzxnSQRyneW8EQ3LrYAKCtGIqQAVQm4UNtq5gv0hUFyV9GUbEP/ZmhUCNKzCoKulkK7xAhKMWG9UUXgQkBKfOXMMsIiyupH8uLUe9+GCYt5rLd/9fPSDBf2eCIOm8dJBz/N1tO8UouC/DbRnm8tjxsmOpCa8B8Euv/u3lP+kPsSQcBC7GPw3zP+VBCpJ8vGWGoyEvSGzExPZIl+KAFaGbDbTWRYPnFxS4utTobYPF2asSyWnyFIMJ/r7p5TrVdmIYtzKPY08SKSsxnB6BecflV/P2WJGdRiiT1KGZQTJkEvQ9gs7bFoX/a3zJSXV2Bjf8Y5bkXlBjbdEgYTo0u/xn6cuEXsoGzHrx35qnJ5xY8Cb7O92P9kdPUWoQHEjQk5MqFjloqkPv2qRdnBkCLmJWvvQ1lw6/0T2MKXnougN3iBtUikN2B7o/pOf6qOl0nQeayR+uQeq2ft+1A/CMq236aFN4I+3GE5PR8HCpi5lI5JosTzqs5cJ4Dh2KVF1zmPZa/HYMr1rTs+snGfzYjYhN18495pan5opgivG0Qgnbp4ZHHdb95aY7MGuZ1HR1mUjzs4fDjaa+0dCVZr/CrGd6teGf1qqyXP7xZUaJPilvezimg68v6e+FRqL6B1MGD+7DqHWcR/c9AuodTbnWtIU5bt8Ruk5SA5GaDMgM8/8/JkctyMxGWtxW/eU0W6ychntfIrQGMvUZMMfXzQGf+Q6QYn85q/A/OiVUcOe+42T8viTmSiME5ZUTf7PZ93cPSGRn1PP89NR/8cG16YRrcIJbmD8CjeH2B7UGX8e/pQrdOtaAINvAsST0AksWxYkRmzygQD5lR22a476x0vpBw0CPvNB4H2TLoA6/WjeN/rO9Ki78yLr+g0XEWYOepJxntxMYJrWz0f7iKf4tDKOsWw+S4DzJAA3Re8RZ9rAFcmTXuS0/B3kwaGgwKE9Tr2QnalIugAOrIBnjcqIZHXPj+ERqAEcVCy/fLdfyXhmkRwXzsuZD/rARxxpKDpGaVyK0reSulC6pP3WuPDfHPKal218ld6CKJ9i8LqUk+ueiIWClr7f9AoJ6fk2C4AdtXmdcQOJyaGxivCua+Ob6FyfBlwQwIpSoJnVCL9I6H8noOFN/VT1Br41Np7cANKf3ooDDmfmk+4GThEDuEvuBRCuuXWd2f5cqBgl3fve/N+jRDhjEQOJtmEyAvDza5XzYKATLRbgaucgt0G+dajxGmsJPalfCtN1QuNYLSlGuODU2zuBAUV1gVXiKYlJ3gHQHDnC0NEOuqHE8GDNgjyIpCrJBGGplpYYYNfypRFC2DrqPxfS7xecEQHvoj4lN08+bX4MEju7x85AIlfckhYP+NGXlmZ6ErKSQTfN3/Rf7VSbJytoLPmfub7wB5X2a/ZXU2FIvEELpWr+Rr/6EG9fXw8M4kbJrL5hrRLcrBHoGEUeWIbXFjVsAx/Fvj7txG+QXTlxThbQ/2/p/rVss18tORbkLS5HLHuuWNSvODCa3DiLuTxSO3qlb9SxzgBfi9FJ6r6D/7kYpEav0AxOq9Z68W5WrcYzbJc4hXPO2/fMkmxqS4fZp4RQmoR5SgxSNnHsGBkhKMbkYuu7Vtc7/zjum+rTPCg5/k+K0K7rGFAOC3DPoY4/TaFznwBmwMlBTW8mVqtVzXQX6hJNBEgJNE2FfgwAy60mMe2OsMh5wXpcs3QffGzI8XHU5HF5LBqMjFayn85p6fluMFiIgVt5H3R+zGan+mmVt26ffrdhN1VKzbpDe/+17sy+ALuxBEaSF1TPsxViseFA+uV9eRI0svgyFTQqG9wm8HmtZIxVPg2lbdhgteJ3RIlRomBdKaevzrAZJt7JRd/MEJbFaICwD6umzPlMsOuC+U8nzGJwpCdqvL3CHOIOM5axTemTeop/vzs5Zy+P+gJiBqDPVMZ3I8FJ1XCmiGswQVpghIMkykk6iVl2RmVoSbYiEQtGoU/x3p1gu2VFtm6YXyQE7/sdjWrIJ0N+ryezLSeCb0+bO7yXfEDh9S1yyseapdpDmgowWVvGC70HlqAGxn7zz1/vp/ipKDhlQgf/di/6mYI3/evaULRZCshSNo897Jbtbqt+RPc6TpBUx/VngubbnU1rzKIz1rr7EF8vTHD93bEM+Tr78pwS9uunAIUD42d1Yf5bueD3tYddDun2L2QjPiPo7ZhJc+CfDZhOxds/6XhzVvV/sERp0AguilU2l2O2aSt+RidBsYUwijRdPzeL+bqN6XBxTxM9XGW1ZiWtQ1lnM+hU+wssHgLucNHc399xsqVvAiSWE+pCy1qWzJqR9kaQXOwVCtBXTrxZfjeImjWx0DLwiZq4ukY+cALRVz7yCv6SyE0JqGXHZ9FkgbVjcrWw5VBdGYSxICcEa0qUAMVjIErs62DP6z3AcT1DoQuqJrMNaZ5/OCEyg7izjkUykbSkSVOzUKh/UlRmyW1kq4LD51V4uGct951RsRiaS7nZ6M9WQn/t5/3rxCw0Fw5VvY+WkwMBjheAm9kbe1JKE0daFS2B43GmagDuBX28V5GyzJiSJBd0uqY8WV6lhXwgbcwQlRRAEdu60w34fGgpw5t2hfsNRxXJE8NKyf69C4m7XaxGbkhYKosF1VXfpFpLeSQ2YjQyxDcDvbjMl2qGLyeqWa5Nr13B8wRla08BE1NZ4Y6tJ4leUmi81H3sVrANIaETFL4osjbGkGapZssCVdIulVn3hLh6SkXLqoXXS81mFbKAQkDJ4Wnvd+LpZ3aNIw4VpgWB+hGxyRBbj5j01GxoI03vBll2Cv5AbJscHwmlXn9hzM3QXyM1wKlYWooaNiyradIIhCgfwLcpPqx1P9OS36HkuyPrXJAImzU84Oe/y1rqMsaFNBmO2f3qZ7KFGmLv21BF6L6xhPWvfofeXqgXww7rXn4AZb60HizLGWFHO88elYYHEre5yOjZ9HXsqE29r6jI9+N+/yN4AjGp1fbRpwr28463E8KIH46pBK3OVsS7PM8eR+i8G5yViLcDdlSzgXM8OjtrNKjxrYuhTdzdryR6QOjvJfu3OqET8G3ELq6C13C1oTdBwkF1OUg+cmY5uwH1KVbuDJPSweiIWBT3+5FA0OYs67MehBO1DEJKnPmMIFlodZ3bIe94ZxI6oXri+VoNwtZ8wKPfXWAYMuh5IyM/54wZCL2tmxCQ0OsevfJud7bEierVu4J3RMwhL1DY/d/u2/DVpgJj0i5lspt74lMfaOpFg0NxuXTAklg0kgRQTYNnm9PdDtcQtVviidne/miROyMZ3BAw9lZMUMMsYUO384bF3iBHsfhmDKTgP9csHoiFfnTRLJ4xvA/eRPXLaW8aE3SmkSXPYJpr2CiloNvkXJs/i9QDnLE11B3IsUVUVHKqUpdc1ms9jQJBnukB76EF3S6dROOeXYBuezMdqx5SarA29H03tbAVUjOdoSeu5sYEthTW8DTUznVFkfai8OQ4yzS76Y0KIPVt1upm8kdZyiNLxz/LyMAsLDo1OhR3REoMgyI7Nw3zRiBsKnHHl1mmELW/QDxGLtpupCynOa0ztSiXdRTLeZ/lPSVOjiv8bDMq2P8/Fsan+4zpldlaGTA/4UhfmcUx19UCV8YGMvRXuvYiWx7zCQPeu//LWM1+PJAdEyQEUTVUJeHR5K2xOvg8DcmGbOhnjRIEjVBfFhL5rvwwHxk1mF3A59DiUfxuY5ud/OKEKF8FXErqojT8DKnd1CR9aNZusMb4D7eXLkyHwDa/8jaY96WezF75zvcRKpeam00FdXls0uHFFNINohn51iYI/0wjnaoltqu8FkbVi9L+9gd5BOitQGyPLC1jlErcUBmjBYqpZV9iOjOQEHEBIfDt2gJXQmkOfDyrpMiXN0ft1tP1HFMvWeg0UOHfWs0YlDZVW8BQ5UVp70bi/UaivSgpRFPduMGMG6sj5Xp3WcaiklMAuyOfiQfmwvSf8qz+rK9hzVuT0ClHdmP1TA0Z8IQvOG4kG1DfJAE2Q0TTu/NdTfx6jPk5JNqzidMgMwb+kK8yh/tzGUw5B61fyUhK87c3aMKxM4gcawkTxfwdMOTVxUMWC0pT7VDl0xoCaQ9qGD50lzCxSAyj6/swh51IGLD8WvjzN3QV41Q1VbztX7Q8l8TvoXsq581FdZgO1ZP8ftclxQeoJrdeYUbJ8JNiFdpw1UMgdOxmXAmF89Mxu3pi8HKenK+WcHHe8ODU8pOG54cIpomBjAgWi02l6TIqsWVGQU15CIHEbAfzHKhsmJh12xlahClk9lNrtni//ahb1++dcFmlPeHOOmQpEfTu9T/ceTKdfv1z7spVL47W/2XaY02u/2Dh2NBbCVa3KaFBJnb9j8Jf7sO0NxW2cvwxhdFe2lGNO4VN6Dxi1lSy/E8+mfQZhgn6kXA+OA3C/2btzsy8ADPTUeVBLj+VptJ70j84D9F9vPtmzcznGH+sYrvUr4kgvyWclBUSiWUtikmCI/ruDRokUX6JAqmIPD/n/antkEFhbLNri3K4NUM1Pib0vIn+tuYt7ARG3l/wcj0ZmVKEnLa+DxGUb8JDSJ9/enX/kFl9n/5c5rjXyYJ2S+AODZpm/Q8iZZVQBXWoskjeWTg6BGpDIaXB5EIi8/nRMQlDnhHrd0Vt9s8ckDAATDj7jmPW5wo43pMOmcKILQHK0N20mS2xFqtlhLgM/ybLoYa2A5IOZ4y2d1e7ZqYuS5xwAhZRcHn4HBHsBM9XqTwzhpPhIkledXBWSatYAOlPL5NEaA8W0O7FnJ2oCoHuRa7tuV5J3gB+GAOhe/RFaUMtaVZbvqDCuHw2jVVq32V9B4We4U8MJ92ykqj1Vbs7Z11yZVWsGOelFL44P56cP7zWPkozKJlHEhxuSv7R0nZq8lGtb5h8xLDDqtJsNllJTzMm8lqXx//aat0dGTA1Vcft+U40IKGdECsmUlcQy3EdUrFyKvZQQvW7gnorJqR81nKtjAneO77mb6dFflFH9quc5DC2FLgXksC5W0QtrE0vCDB331U6+/rn4vPzqL+ZpqW9y1XSnzIfx3gHLY1sG/be4QP86rw293LJ2G0Rf/VuGsqLmNcEKl6o3VLFLJ/htU+9I89wkCNLWZk8D1l+aGT1kYxlsnalFIiYpQs1g7SPj4c0nUJAO+EgDmePoMokaImFUyXTNJUulG0rXa+zjZqTCcFWgfzkYIXW+V8olUIgEn/g8gcsIR1XmbzPRClSo18PQsvkSFKsbZmWh62jPfhIcCecmhiZFAWVn6pPxwdeoIt8J1EBrq4+FLeGCzRKXYftLzJrdp32aU1pKi5jXBWSSPgc8gy6K0tZn8Am8i+g5odMbFc42QCW4BqexiGxVPiq5zosMDNlvGEGr5X4vgKNe8XeRaTou0PBCjmlxhwunPdjtHKbfKwsgpGlGXio/HkJassQtigYjWVmG92OUPt0LxxP7GW7KvKQon0rdiUbzjf5L2N3I7blFzSBqQAPhZ3BKrB0Iuv/4A0REnJfnhBvph+RALQNsubxXVKnQ094VgtD8sPV850SwJBQ3CAwBbvzmJCrpNMF2CxnXBXJuPne06b4cDq0LN7qs+pmB1Vy4FzPD+RwCbBpalFGb91HGe57AC8Z7IqXQyOTumgoImvQOgFCk5l6IfARL/okEhLad2bwnvSJl+8fhOPVlX4wNv6qn+QOE6TZLbSYFA1gOD209w/BppybqjLo1BjBGgMRCVJZqiXuDb15V5eXwdDSmC0ifOM6INF4Pbv4jMta6bu3ni7e+RyJsAeyY+yjLvB6H1j1KjXUIeIIASHEohdYC1mWcxU3cVmS4RatFILTNafnDd6pljtX+ArGvqEmOOP0/KBkJecSI9NUwwulI/0dm2k/TDWOoBNPiDfDlJNp7SAheSfsPI/zQjoeAUenwRf8kOk4qFmY+PzUfeUeOtryGhsDACsh+j0GAtnvGucSnMP/DLUJRi5cgH0EXMT2v9wflwuqMlHyqIx1Lrd5qFsQeowtv8QdcYm0U2p6xyxxYMwgtWuMq2YDu1IX403G+3FQNbaroGzIHSbTpdIMMRVv7KSnHsvifUB1ZVCwevEuZHsl1u/U1JRDIzc4YH6xQJK3zYp6T2OKSHx2sXZsuu46GObGBkrBs2PyXgHGRjovrZ5uXitNa61SX1rXBIu68kcg5ukdDVqpCrYKpqb4hsRwJMrlHNS4/eol6WGLD4tDGkqJHrpCF4fi4XfAIBtRcTTwGr4Gvx3khtGxDouvFkt3GiUdqEPLnBxa57scXpMt6Xst1cwUwRt9rhahXTZXl0jBm4xSHKaOPw2JDBMYc5wDUExOtQFyryNWmDXUyxDfERT9p9AbpEMYyp9OJYCpSYV7njmQjmTy4AgDoe5BmepOoyz/OJT/T5AqGd3MrLP6W5FWCQS3lQ/6zxzpA9JjpNLBckHXrja/jDLCQncvCO3SSSMgObY9QBZpBdg8NfOhKtOina3c/1VpZ2xi/ZGF+qyL7HnTSmDuw7OcLNegzTK0nFS+L+rr/3Y1UZBqXjedJHEPGPShWFCVkmNI5aV1tqJmJ5jYrICM6nSx+1beVv2BVybBoRkqkFFIO5nibMjGvvbm0oWFCQPLtKW0QBR44zDh2a2j+eWBllHsla6VR2yz9x3o6pfCG0VPk/JQrPxY7e5Enset0e5uZQ1HZsWNH1fBddyfyg+ALbY3pO6XNa5KNT0A/oZMW3LA3494bX2aZqXWFa8ZZ4ZeRdmgoLbkiUmWNYFRudNLcJY++kWub+4rvZdjELw9fTqyD4Q1kpcq0RjMYiajCEn1RdjNSAWfv4rpdhGfzMQcaaW9uSglgZ0wluTRmLGzrN/+Nq3iN6b6RgYNsIbE0MRJI1wfi9KA/iM8+4RsOnu5pkmQLjaJl7aitRUYjvCnR+FLRAru9jF7u8VlN3yO+8OiZhGZaBhjZ+RL0RX4yCjy/G1hRB2n3SRNjRmkmLjqB5QgRILJ7g0GXAz1X0EWSxE67KTC43FFPRZd4fE10Efc3ZZ1V2zAGw3r/F0CtvEExSI8Xxy744l5EhhbE1oXNXqD1aQxu1iZw/bTm5uAsNg4wQN+GESCjwQljm6I+fCkplfe1Vgcgfn1AunO0X+VkakU7jjGGD/R1KAU1TeG/7kZmWgQgFSW0S+7ryRXxXUNWUogHkO6lJh0CtFx25e1VyYGtdFMlMz/nPQi+tJDnevAAa3dJQJzpaiN7XXKJ3dC1CE3j874l27EGWGYr8nGbbOCv+KjYpzxEyr/MHanTzY47yGGxhvd/vwxZYUAzWASvrhq/Eu0aMDzNtwh6GBpSUbXlVlYtTRH9BXIeyYVIFQG7so7+33pV7sq2VCeU2rYB4Wmn2u9ITo79CLhdAwKDbJ+5nD3xQNWtHEA0/lSjII73TQ1Na/92hz3XN5MO/glUWNAvpxqSaEeEY6uSbJZ20f+YTSHtw+RKaBCXby2sEbq5+YwoCYy4X/Kn5JJ351zaUnbdZIHstGS8sbSzk7Ulob6TxyIUnN0lf3MXkVEWG33W0qqoYhfKrPfh6SnrNxoshlfXG0x3eZkyJguyHqGqRnZ3+brenNP2opwi+gYzsMXvQUSvjSpdbCzKCEgsol2ULV95b3zafgYBOtVdnDEA/p/JKRT/ODjO8rUSv220+V8wMUAhtQII5qKeWGRCTfO/jpXdMCeFKHUkReoOU8BqpTxMlg/9oD1AkVAAAFolGbfVlSOpf1FeQ+2OMRCTD/24z0d3xqXNhQ1o7GUbAgNYwZ/zPXPv0wn+x9qjzm5cLq4VgnXDKeghDiHJa/qRbhNrBeJSwFmPdXV2961/1stdJVGdsFIvGj68czXKkIqwSzHz45R2ZAwZCvtj2SfNuNTd9/w6vhyggbc1j+Et5UreMrNWDHLi7tSqMgpTKp1o+0d7aknidqjWwG1GSmTnwcRR//SrQglGBXRW2xfaao8QPvCNCDHDX9r+ER7HNyPZpm1YDMD3OdqW3Z3w2skTeli6EynVG5zUDb3jrlCaxSwnX+teAihEzPWIQFkaXg2X4ickLa/YGhd0+OGJNhE8jwFyLWTU6jy7APESBtXEX5a/syxcesbv7/i1yWVfOF1Z8+8OwPNwlIZTyPdJaLh/KAmbbB8Xnj3fbgc04AK6R7qTCodSUxaVBnwEjwRPVJ82Bf3uK9PnI/nQsSQe6dnRnXKSPqbMr3emgBvSL5KCanWdyJTCTkiucZ8IDZJrJEWW8Les1Ms2vOGguDyKC9grsak/VVhQ00ZlqZmv723MvwKYAAo6EIWn50PfN2WEp/C3MhqgWLdcJtX7sREy1ig1OGQJVFTAE1VPEXKhWtvjlLlA7obEYR/svLux1zixfO1HwSQuPpQSKDWgDbyTMIZt/wf7WifdTyl0zxUiQU19EvyUKlSuvkIxVgsgU6E4uZrt405P0s1YupZbMatzIgujwhVKotqWIv4uDGZ9SvzmoosSllzyZLXa6HnpaocawzdvVEol1W1/gkn0SmTfNIVY/4Pj8NG0COs3uNNxspWSBkhLYc8rIyMzAWYFL+RlQkZXc3JQw+/d7eShawpyY3itAgpQVXDVESr/r/skiqLSUeKQaN2fM2WYAY7oSKuQXYbhIucOQMAU0B8aEqUarrm6e45Mn7F5WO5mc/77BGOLMjymDpIzeTvdkvwwQqkiATaMRGnCoduK7oUH8WdR+2SUXC+i74fJJMssmXodwfRjnhCXhRYQvHHIu4x29XVlGAn3jpNOtQUGMRMMVo48d0KqT+FWnEzOJLgnjQpUV8wBjwF7EcweK2J1fDcxX/cC61tU+hcQJWKtjC9LbEnq0m8xsw3+V2yhf1VCfLVOWB3dS/1ECwoq9aGJ0restk5DKyfOn7gbkIkU9cfMCxE5+hFU/4FS4wdu3c+uCq26CNAgFfgJEHvqKHsq2QozB5v5Nj4T8sYlaRa/0se+5Wk6qiJVLbPsK8T7c85irFj6Gnp4uD9uzUq30Lh9vR0QQKRXq5dTam3v+MYtvVKS+Lig4LkDloc6WWNsYQgWd32TVS0gSyybBiy5GSL9dVlTpVhKQXoUfY7FmyEDYGVWCM15h0wjmlsiYcISlVsWkAAAAAAAAAArXoRb751Y+dhSuZ/FuqSAVTc0DEMktVqEFJAAS88Sf1ZCQhURqCIFyRT8n87dnKhDl9MQWuVv1l7uGz5AA4vi7BrszscCmNFaHyKsY+3dgJDr4VHK0XZ+MvnR5Opg21aBLhY1rA5ILU+17Q8L4ZklZ9IJ17bb6exoj0eUDeDDu5Qsf/QzDAX5V6Mj1UPfeIr/fCZIwRmKVFl/LfnZSPokhQWnhkleWcST/3rbve4ul3/PhxmRpUNAnik+CfyPEentqYq55eIJs7CULQ5vXfI032C0a8sIUbOR51bYjer0Q8Vim+Utly7iodjPos2AMaLLGJ9msp2XlJS0yZ+Q+RVvOZkkvkHJT/iUcD6l5lkhguVXcggw6Vp3DQEs0MwKSbAf8pn5qbxVqouNEd7kag4ime0T63QAgea2teIst8dZIoAKXB8RzNXzTgUulequNlmXv/glCmm2Vuao5RkblddOKBz4xxIAHL0bej4CsUyJarZ+th39TYvZUhgrrsALqjULxWiRZxATpCdC89zAybLtMK6c64Fa3AxerPbpyMwf/5xRJNGfu/rd0A5j6IxIZ7eYhalCXzyTjs9aJCuV9Harx7e445eI3zcgyxmMWAX01LvCYmngOV98/wLttxtBOE3vBOFLMDA2bYE6uCPTb/gaHiSYJdm28OYyiiqzxrwKIqpf0lVWzbj0RArU3EBTjX97FiINptoLa9rToGGbJCSA+lyd9MMaABmxL9Habkuz4kB2IbPnD3egyasAyTZa5OHquFV10DBJgjQpST7X4wFvm04vxYM8ZLfwWJdJfER/BX8gHlg/dr7H/RuH6GliV8d4LZvEpmosPIdP/ZAT1fKkdvFtDLsD79iv+i51D4e3gTbtKWc3++A+PS9nH0Iq8xZezxmN/BhQg8Jeo4CpHRkai/SDdSJUm+TOn07YZ5rB4gDUsrH7pRvjKzY96Xw7+UmStR9NpcYrlL0wIo2YYmy5m2j1iM8PTX4ttIO15pg6LlpxxdobyXllkUnfsN1BNtf41EzZDrx2RDYSCd53qaEk/wsffwmqQ5jC1vcHkAnFjfaKZzFAZ0jnJT24voShwMeyomdZIEDN3wT1uDB7Ifytl2Xh/Dh5UDS24GIo3SjUM4ZDl+gj9rrczIU3tEL+jE4HKpl/gghvxpuqrpi8BHnaYQc1W2fbTd7bawyZMxsW4byazYls57DORUAxbNLUaHaA6TvzThr7Hxu+XZ8f0sWSEmamhWu9gpciXHGdnmkVTD1BRHMqtbVrSmafH2Qx+Lbf5p596EdI3Idd2YfwFkeuk8ieWQotNirsk2hRiy7ZJl4bYZkxuOJC1dscfRy+djCKteYDW5a8fLAxPjD9tpLBGl1pYGGW18+cumCDRinYzePb10f/WtZHVU+lq2t/x3ktd7CRlZSu5G/W+nq4vIBn2YRuwyCV96MPOIovNH8C/Ag1W6XEPAO9iSzphkMWjYyOBT9sxQXhRtw4TGJJ2YAUM8sHmpygzRIdLCTpNq1Y+DYrm9JVli9Y6GgzsWb4k+BXMLjrP9k8r0l6ANP9c8Vxg2tE8GrXl6ujsoVmVEVcgnjkf5L852nqTsv2SRbhVGVp9+PXM8fOhN1/hy6ALcees6fZ0AuRHJ4dDP9FltVnIMn8A/VwsFl/hZDqaYv9LFjHAMnnbfs8JjSc//TZ1ZxReXJZ6kVV1umfcq6X0r3drI2xjcuPsGMd+SXhzsC6EAZhoiXSuHWP06Rrry2XP1GJvRtRyR0SDs9gxEyNXf5T9t9KzR7JGj/MSX7f8UR/tCMdMiPb75k53/26yhG1q74RgedOWaauLOwNv0GZoDBh1D2Z/QjOxGdS3lGkLNCAWvAd53tiuh6q/hqM5Meq5va7rlaKTgLGl38N/aAUUNS3CVqabzRmi6/k4hoN7R+uLb8DZKTghS2Os0BnsPWFrNNFfuKafOkDDeeQyNns2zj/JEF+WcnJtPJVQs/M+5nhFch+0Mxp9TwmkninVpUr898WwH90HOBiLx1fLDYfxj/SbyVxUO1cstmlBq5dG+srXFtePAYXUu/MoIwSsx/nUUHjTTts3mY15cuxmpgZZ0zHxk3J6mQbEmfylj/9UYz5EvChikyNzi8wT0PpZzK513tSNIKQx2VAco308TagQqbsqZJfR+AS7JFkog3Ie2NMS95sFf/wrYf9YqVmI/el/WFvofDsqXnye5uWH+MDzXKSOO7TEPrk0QSHyxuShlPH1+cN5yHFKuklQhdLzE62md2M0vz4L8amBh+5OAPLXN+IMmAlkfxCyweFXP6NW2y4I0nxqfv55Xr8zNd9byomX4kIuyW1s0lsu5TqlRzV9tbCABrJ1PenPMf92OJgUUyfVvgG4d8uWMTsxM3KoGCB15X2JkZkcwTVoMPkuxldMY/B8U8EVrI7JyqOyz6KSVt4tFO7DvrX4BkigYfmgN5Wai5kTZbLoTBR0bXumW80AY1t8Ntiwf4IqzdaSSJ+1XExr6UH0bu23vHUt/Lasu8P0vxDZAtld97mVj/N74vQKtk7dtHYRGDZundEukuVOe7QjmlwjhtCEe77K1RC2fZmu2c3t+DvY40OcJD11+fgUPsJJbE9XW9RJfS5bPtth3KqTsFxqts9ZpnrVgDsIThbvPL+1bXuSCMB4FBWP8cAb1CjF7W9JLBM+y0vnyHcn5L/04K4m3Cgg22eI2YPfuDxaggKKimrlZ5iJ6wKtgiThP9MKNHTBvhhoU76jOA/C0Iocmk/ZMo6jXgEXvytQYVTFFpBS75cL+vYd4Ejdbd5JarXMGp9m/EMXMyKYHf6PJyveBH+5f3TMmCMfu6ejeB7v3EgP69ROfq+BmxLs0S0mXkU1o6MFxRtJZkuT2GsO/Jz9skkkiIo2ymhsookBwI8vyruWsEKaXBvP/lP/mmYBvRK4aTMuviAMz7AeO52t+isBgmmTdu950Grh5ST10/fsyP601Xi6MenLH6cfUv+hbiqYiz19LTGbKJftm0CQIidxWLyXJYlT/shuiKJezvo2bSTZkhIMoH9aR0NOl95oS1sv9hroIE8xMNWxgGzS5RrVOD3KcbFagYSq79AdkiavPbKuDuaSO95zq5Z3KnjeKveL0NQfns1UtGlDdc6Jw13uSQdNekIxKBGCOUYouy7ZgWrBlt3GxoIbfVqUreRs8HfgWTNskLEaL7lbseuk48Ga2SaPBBthiMGj/nM15N5DYkXfNK1kBmMcRiuza5Zqosh/yQLQ5q3dqBFhe7ReY4MpK87lXEAhO/bbgR8SY2F76XHtmLcmRJbc0CFID6lv0qUz3BvnEcRsxCS9CIZRTLc9efqGbcc932nr+AGnInLbX+1bFkfOc0aELqlLD8c8bfnsvN1VuB85ufQ3H8Qw9klzn5ixkdevYJ8gK4ISvRSNYOyrNAOJuK+tC0UfzRmFI04PWKLEZPI25vQAiV5skMarNmQRgCce8ZxZBB1j05lNE8Sn0d8BaOJcPiSIwjkDVNSBeU7jZPlkwblo74cYUKvc9OCjjJvLNzRx/u/psrouG8z0nwzhxZYioxKQAtx47KVjl0BRcjiH4kM2cuIpkw+lZ2DAnxQ6Bpgxqy6O/dymt2CFwJ0lhcs/hVRRfpZOo2rJ6m4Iipj6Q/szNo3FZ/3My8HBFhRp2DHOdSmIgNFXIFRB7tAz0TF4DoLH1V6rZ0CgDEO3WeeZAqFB98CfSXnc7I4/O7WHTIr021+H7GJ3A4HmkSq2Bl2xIm8q/NOh8M36SELDKFFKfQa65WwI4mLMwhnl2h98fpNK9j+h7a1M4ljbUdLbEpLv6q9CgxqDRIn12JSnlRVN863QkAuNxBQ/nQFUFl/7LwON6m6M9MLTMZ84H2lJyLjoi6w6pTnuszJVTZV1nnnl/P01vmIIVQtr4SHE9+8x6z7OGTL7CgcsXF3khPr+dbRkz9aupwD9fK+P0GutpLBRFT2CrdZY86i91bQjbMRBJxtj9/klrgiTEZ7IV2Rx0CmoPe+eyjOdVIEvlLmzVSB27slXCXWFw262mljKX/VHNJ8a+ybKeTnH6R60Ci3+eu4p1Yr1R9nVSz7ax0ARwJ58hItqxaFW6YIFnLncgo8bkKXGBeI9mhku/JtQdqXgbiBDAmReNDL9/xZ/y1eYigOvYGnCrlHwbnq8S5MhuRnhjQIdrzO8+lYcnmiH6x1maEHyhVLWB9aQBrUFjn8y/M98wPvPzhLnt9UpX4spU6EWDCXKvgjbBIxtg4PfdYc7KkV6JZFdnXzWSnhZADd0kaxXM2t4DSlUiU4dF8FqbC1O9WvwHIi5Om+zIqYC2wUSJIgH0aMm2+24+0x4zJ3HXXuY86sc1I5i5oNzA7WwJPHliK7anlZc7XXVORKYieOo4AIF925c/C7+32Q2s4TeYOXAqupboCRaIFssiDIdZpSZN7oew8ensQsuR9W+Sy1Y0hz0m7Z2nd5S8sjE12QJqKdUlT//vWCA6U5F4sShgMxbpkLbqItBKa+ij9VjY7unCvlTLyR3MmNmPuHK9WYPvK641tAiZGss2Klxv9blh9yOi2X5e4+XmdjR/5r7uH6GiZOrTMVtfE1fh+OElW+maAJuGO9TlBdsFW0iDDS5yfqmdP3mKP933cSXYARmBtHzAooEjEMUTCLJU6+UPeQPSV+DyERF5zpv9/12t7uXpoMUEgohP7BA+JY29yzEI0DS+bdJxa/dHkIHQeBpoiLHkqUbllmDBPhW0qrFXY5rcPXWBD22IOffCrzibwrgtDBbR3aw7CRhK5XfryM0MZVclexejI83rmeGM+udTS8AGu3StMzQ1nPQccjUlHVUVm6sy+A47hOnSHb3MaaGBqxevqJl1E2IAUeGvTVEZ9mRTYYH6jcXTqGQZeZPMDFctnigX4sXaZBIdJeDTd1bOyfCExtDFlxSzGlgjFsgDcMgxhp3CzH2yqnWI78h2+o7lD7iuOH1uwTPCEv2cHyGVHKHNbjIJ3sqNlpDITwBJI8/fNT/4QcjCFUKdZj+qe8Ejgr2EJcOjInGwg6KKvQQxWrKgeodGlx88imIKak57ct8wmVCa3xOEYS+7McNR6mlGnJE/ll1Eg1RmFx04LhHHCe5ExqMAZGTZKLCda7qC0EK+Db23vfRX5i6mvlwbnphg1iKjSMC7xgpaTj4Nd+ugXrepPbVCYA3hUYjOTIrpl2ZIuLJe5pMELlhrN8clGQ7Ym3TRb0aLDHDLauMuABi/dTgoeqVCLv6REdN8qiKAhxiZk1fpIlLspL0wH6KgYsW04G5cNYP2WEN23dJTOPN6OfvpWon1BYBSGPxNnV5Zt4wDWTKj0pFJFccijCB9xURg3Bp6NQlfJZ/wU4b/ynsGr2MJwc86Y7vyg3ya6a27rLnvKhkVM1ygeGHIoyOcFkJxTZAimJkqkN60no46/NUEfvxa4Qcwv1BFo+yqjDeu7leCDM9p6VGDU9ZVs/Ofe3G5VolqxvCckefNpxTYuLJn3DtQLCW9pkx/izep9HyUaFQx9JElK4SP68JFYl23pcEqHq8J0uX7ERceoCuLr5aj7OHwQJEXBPKZNkYNiG9cJcgMEo4CrVEdAp3lxSz7EPtLxp6AKr8i0/SbXkWgE6aBBCqE/htGXBcOGOO1FTxns3kOhHVTXmNs6PEkTipPQWN9uFYl4YNb0vGyaJNZFtgTFeMIIDP3l7v7sy3WOQQXqk09pGdjnkCsKXx+i849XzbjhlNopGUlg4g7zHjntNOoJxmuIWWPaoRa+M2PNx4x8cxkuAAptDL5mdDQOvYO4k+y4e6lHnCsOXYBpLT2T8MqqSEZR/AdPEH8M250QFRANCBdn3cSZoRg+4gysbKLMWC4A3G0kpTAoW7/L2Q+sYSKB8IwiMHfgLWs9OHcKbGpT/Uzh1BMGDn87cgaxBcv6nycYpAHqTmGDi8IPat3FwpPZ4WpVMpT7wYf30UuXeDYgNl0HQPLhQl3aLZgEHv1j5/E6ZIiHzuYDnXDr27gjQbWpva9cereMrsbQvuV2rSw87qygSYoOY/ZcKhrUnWrks+yWJZ82opywSK5psVHTdIMk8r0ltZESZCsGFqFPKT8UZ5a3p5ClGCS74zmQSosHEQXnNhGmvZQqCDUV7aKa5BKZq64YeSiDcRDe/OB0Ok2F+63JBIzcsvewPwGsqmjw47IEGtLxZFBnGLtvGUH47Vx0hkBEUQUGKpHNQwqnlFMaGZE9a41Hn4XTEd1rk+Cm9jWpvKdSD/ruj3vgw0cWqRALbTElwy27vRzsF0op3cVKv6r4qNK5QOCQGuSMPJvvyd6HHB73EK9VSUj33wwmnSxjaKggWbQzscLHtnpFDQXoLF3wZMHCoQ7aLk3GMHk4hbaNJKGkHRAGlHdGKMt58UWsQUZt7KUBSvKZI9mphS/UJWj8gLWi0EZYlQp0tIRFyabJ1/inuua4g9HfOyIN2RQ6/SIU7neLVtYKC8mRzLBtybnq7ZR/Gg53rI9OV+mK7BXONYCDpzeGtUb6GrYEdlEjrWuyagrJsoErxRaut5cBKJUQAAu/DzQ8VKgQ1aFJ80dvmHG18noo/Q04nKvfzqt98wWGtxXI/AOcl5cyFDx6oqNWSUnt1B3nxrXwusrS/xv2FMWBHSwV8ZcA4b8J0UafdrrQDL3mukBew+fyzmZ+1GxiaJh4rMUc5pBrdxFynWCGeQ+5PU6Y295fGYfVKJd9Md+duRGzZvYCUnrQPTXtyBdkVRfudj+8GCcdGF8FOk3la6lBrC097NKKRuqkJ8gYmZS8gHvMPLkBtTS6TtiOoIhVAVUSJYjA5YvaQOGZlKI/ZEiC9kAIW4ZYlEvJgvyzhljrxx+gsWWWFlflMDMraR944cWNAAZzO6gTXtRzPWJ5YlYc7ZCRIzOa28kEF7fSl8hEHjPRWy5/+zuGFCKXDd5ITyk/6MFnwMSrRK4787QhYNEqoFsoThAhsQkJb7r8AXgi2f+XPnULHqEtymSd/nr5f2vk9MTUPttR0JaspET55KxE22V1UyjUXKwDVw1MO3B4TkByCI4222X0U0oD+NEguMsDWzz5zLNPWDIXRPNALJLrPkVWOQPkI6hquuRU7sDt1dW6ngsqDSGvY3W8UCBHZUddr3WS48KdyZCu5RFLbq9q89CcAb4sDa9yxXiJA68dTkZP74YkXw9/fvZlYrJzycIVhxTbwnw9Tm3WmR2pEB8aaBS+MBuKjKWtnmofidIFkkgy9L6g6zIyqLxZ0PFhDWJueLXpjec/s2SP3NPkml4ArtZIwM+JzGPtWtwAAAAiRFqlPqr0w1gfFJUylhNSCbeWgSUwKEiIKRHmtNJZ5K6uw1WTL6dmrRMyW61wb5hu/VoBxXtjf1vUEr0EIz/IYIpMA9ONhrb3vt7dM+5xkxyYxNA5Gd1UiiZxi/TpZWyv2qnD6l33TF8e0yVICeSq8v4iH8XfC1dTFS+Tb5ft2+PzEDGaWdoeVTvK7RO2PDF6trf7oguPGgU6r3V0RZELJZxqrZG/Q22AxT85c7ulcJNZF7p+m3H8nUAk7O+gBfBGj9pDJZUPoPzli+Qn0JtCKk5e6koeu6J0aJEfyyALpFgCcGFKBrA41n8v50Nl1chPgEMKIrFxksawNwL0tEiX5w+LbtLmn6U0a9mIrOsj5VpbdZNpoToCVzwPCk9/7MzRRjwPRXF1P/TiujDjP+1xhuSRpgdFYvyH51xTIOp18bXE0trtVWfYXRfDbQo6Uo4YSYELCE/4zFo+5P7cCIyFZ6mxw4mVdn0UioaQxixbblHY5ntifqzxV5uH6ThWYPLJV6V4GgAABWP5jMnLnhf8D8S6AAbFCOAXOdbhrsTXp1Q5vTq9+9xnoLS4ydSsjH6UZyuIS14geIS84jsxAXDv5EaSGYgeIS8T4m4XTSZWNKgKnxbcUxXV1r71D1OAHQ/+f5t4usOe+30YdQEuGvU6bkITFDTEVmyBdidvkOyG+6j37RzLYq6hxJERcBHEKcwPwnJNbIkIIZ56Ot2sRmauKgYvsO5V9nYEtv6CpXHnpt8XcunGVUFagaXRlAP58MSRCsMvu7U38lx74OII0L7tsPhRcNa7Y/WkgBy/sgKGSaLCQQ+HJX9ABrB5UX+VXaOBvj2UrC/lq7L9bJOBJH8RHGBRx2ixqg1cXB1NuoqCaD89/sKrC70HTnJayMPZN94W3YPlq9aPalcOSFHav+J0wuV9A/xyKfVuk29akVinYIWqpmGb8FkhL4+YfOERcyPBr/P4RbarexERmxdSiGOB3CrRUHiZha01w9KUhJhhb2t25icUAUzu/OQmIJWDAU6o67GmBIpB/d0Kzu5f/Vl3sQEtEiC7JG5XRKmBHddxRQEiA3i/5iEJeOKILeuAOVF/XPgKG83mzqkz/Nio/jlnYXwFrVIp+rsThvy84wl6UpzpG3Do8nKGDGnWhCWSPIx323NVBn8K+M8DufwA4l5sAAAJePBpgKI+aQlzDom30Ddh9Of2ADn/jt3Uez1EWHDOyYi/zOjQFln3YBUxF/lFcmrhEem1/mOabX+UP5LF/D03IFOF5b2wiJ/e7KP2j9kI0i4yU0HVJl9sj1TDDWD2RDRoPqLTdDlPLAB6xzb1AfKeyFATPRpFtmjT7GWOo0oEWELLDDe40AD2V2fwBT10gj+zWU9kPMsZyttFhP9cOuEAUlDNyj26+JRmiea+7rCJApkvGrnJHJIBly77V/n8CZDeWrn0RPPQqZSsOYuia5xh6LSkC+Eq3lJZ/SgTTtCjIbaJndY4J/Tulag4Ve/T+SkUXd0zVMyiuUdh6y+9wavLapL+lw5JYJ2M5G4Vk/WKXN7Tk5jructxGvpqUpj5S9PVkxYFd3B5cR1sSDQP2WxcgYJYyymaH3q5epQGd4RDj3utN0ppPQnRTSehLSB+uARz/kq4lArDVG1Lfb6bncYVR7C3aWy64QCvBJJi4BiK/nrRc/iDmubztnRAAh5Sw8tJDiXOlnFBjJYOG3DfHcpXms+6fZVDHU69nGDA2jzYl3vrGZV3mThugdUAExI16WmCySlR3SZHrUZv/WuqKOCa/3L4Faz/bfq+foYuWtJg6BXTDZUVmMXqr5BKZvutnRac+46gtvwNetKJjUAM+pmA3kbNjvj5LLba6b1e3SdTASQElwIep8Me0zBRjpVW5jRUQreAcYfLqUHwe/XxRKgOqbn7s71IMjfr5Fscayx6M4kpIM3Yk6Req86hqLsyawY4Lg39NlYFJ1Ej2B6uEx8/JzEeqNdUvUKdIoCVAnNA+oENu6HdXgPxN1Cnl8n85OMNf9fPeWg7WO8gFNOLiZnAh7MY45WhyyGNVnF4RsTjg7Hq4Mqyk4mUjQOxJRl2Nj7tDbdfSGoB6bpLzLjvjY5/HsUK36LNp3yQCrI7V6/POqmgAAMsTcIwV/4TbRI5c51QMT6qt8SOtEw8PRAARnj8tTJez02amhk2UsxuhnwmCwzUsJ5TWD7mb1mTIMXTOxqIUltD/m6VWybugJEJHHpFxBcAgQp2LEtof/IxSF6nhSF0vNkY3uAKEM0lKWYwnU0Zohil17X2EdNd9l7mwAmu/KC3X/z5os1ufit8VzzuOzH4BJipi0kplSciSQQvi8j5oSbtRJ1hMmwSB6U7UQwxJdqxP8Vviued067zkoLbcsMbyRl/kH0R4YLevtN3uUmy9pULpREmzYW52bUJZoXersFA1+y01vQPxhtzfeN6rjIhSxCWwAFEK7AfAqR+87paeKNNNNpyNdAgfM3LlGtWPDJ/ZrPff/OUVF6Ul0vEb0M0Nnk/qKketSn/c8rysXdhutiHpx9/EWn1MTmeFspSQkKlDCLfl6m8XneNgZnDWPPM7I0Uj8F+MhHfIVetdisEl8x1afmfIyyru8V/cjqgDd1CrdrJtnh61mx4it9DJoIbS67DXh+2GhLgnzxbO13FIbnd4pOaB284M2TFHpdybNH3/WTaai3WV+pNva0NxMmD4wrNeWibAwsctajWNizLZJQ310WaKJO/Qn50ZgYibzvKLBa32aTP93EUXs51p0sa/DP5/jLEJYUN4JaXT0WbuSutPGxw4lWsLzDZGTVA5czuGYGvLDEOwT0VaSdNRfKKXSl6rA2XvGWXsLjAq0a9yyt6366Sm1UKIsMzVXXDLyVbMVLfQxaszOOYmCZlZP/JjUUh0K2D2yPD/kfZkkLC10PEMwpy2dz68cA0hUSVjMN81OciTN5XuLhcaPq/4XHJjZ5amycIcn/swp0XGcQh2X204HZYfyatCYfp6nVJ6WF05AZ31Rhnbqg6DIRV8WsZbQ+VS2OenaFpvvyMZqnYC3wIcaAXxcBGsimNiq15dHewU086hkYF3GNZ3OdjRsp6WqzOaKWmNSYvRlWZqVwCA4KbEgpqma1eUQkgOMeaEZ7BQkiYjkmAdWySTvqPDw+OYwJbTg/AvDGmciJKvUT3D9B0ewFiZbL6vhVx/T/ag2lEew8gzlqn3jT4K21OB7hYGluwWjreb6Dj3ciSqdwSraqCqoTJGNv+PiyTtGI9eN62NoirZvMkuKk5KfLCLyRJA+uTm/w2cNMczD3iWjx3x16lGurLE8PyKxVAPzsampBKSdlhkin+b/4//FwylQ2NbG8Np/ow221WYjoB9jf6yUEynyU/TFl/lrCJ14F9iXdAVMQcEqcoJky1A0HJbEHk8QA8KvH2EL4VEf9tCA0FvC6o6JZpJccywWyWU0LSbo5LGp2lmUfpKtsCpFrZXdyR2DTiEMeo2MmfDWXcmcKSqLCWdHzbtaNu4fePOQBdHXmQZv1L4Qy69zu/i9FGXw0WxrkfXyRjrUcV80BfJTrW+XBmdqHamf+BSYaxefQRvVFW6DIOitLf4Pa7/e91Xwr5e5NU9GaSUOV+t3AxG1kFfkHDrZNl1C3HfqqlE/+ytEhhtcjEZnj5Bdg/7m8WteSUpW36irPrxnjXrRLdQ2L2I7ZRmEIGRWBUiMdACGcdHWYrgziVJwziOSf45NRf843u+BXUSwBGHu8vJIWZ9O3lt/S/PmkDg/usgubX45dn2Fe/QWiFgtytsnEOLlh1p/PPkmOIkSDv5MXK655L4XYd7/fO6MXWSRtljI7girNC38dLoOrYeeQESbq7fafJgkq8LcT89wt19QNPbzJHpta5G1LcWm/tJbpAmvjONpTy710G1qAlH8hhEKwXtR8EzcaGSfw6H0jl3PJz1WBzjiONu8xQORVUIAM9ykBIPEt5thXbUCDHS/mbveVjyQxc7gs0bORT3tBSuEqwJXEbnX47gCGOnBv0TUUgmRP3K3vXONkdnIgdlIXKqxZKRkOLSGYrPBMYTM5YgjjOmOons3WxMM6v9bOUP1TPGW0hefEWSZoXV71KbQjhZ2IViRP/FmEJicQf901eGfq2xYqTeySo/2YYxOS04KhXzYSpynmQRPcENhz4KC/LYR4IYinRfZmX72NCp/vlIy67teJq+KJkXDNpPel7pw0VvEUhYOIYx/mZkpRqibgs7/d/He8vuyquBfWIN+HpHhSIZW5uSsqSvtbxVx249jsRQiuHLi5g8udLtQen1deZ/Xabkji8kDIjsEoj19+TbNPxqlgOVvx8doBOwUixE5sS33Dx9Ei/u/veFwk+fxhQDoPxXGqxLuzvqp8f4atGt4l29ths1VLLwyQNrXQ5DEeKkrEQNAMPVrhA8aNIezFOjvF+E2+MEY5M2Xt5u3i79oovuAwsCrRMM7MYpPGwGeX/h5qa/9gWPmTOZckdsOEa+x9I91jdyU4Bm20hBfa1SiF+9aYeYaZeYvBqn/1lX+woQa21P17lI+zKU5vhF55tBxGLHyMV8+qoB/YHDIt52ETZJd+9putCt9+hpyQ5JGZXE2j5XVnqF3fsNGheeSKI51WuRf9Pbb4gJX0YOmuZwmViDtgcoCyDqORNShYde8THNPYCPaUsmZ2H3V2/wbs/NTssRJE6rqcNSsmUgRnWn7M1GIw+E0VWd/BsKSvf/LAcu3YTkRAjLY5F8BTHNrb3pT5x6BDvj2ASe387k5iA7TPtKELwki2y6hfQMZOaHBbVRYwxBwmInEdSPv27sSPwSC7yNlcfnKd6hhnCPyIA7h1gb/568ah8TJbshBmWyfKTZPJ3byerc8AiPl980+yB6/fa3GkBn2ed8GgG+sTIMUalkrirgOiukhkgBDILowwnqLl7C2Hd5RR8NoANruR7+dNN/jHA9pRAXTkoOlhr24vgoPMjwzs9NC1eR9CUzwyk72g1nev3tABWCVpX3WwDO9JW8inMZ75P+cgDTZVXYeftBPrLWcyIrs4KwOBOS+xUoxQvvtBRIUpLew2rmkI4WG64Aw30yHMJ8Hbbt8VuIzHsKKMr3O+cyhkB+QMC0CJczEZppBT4JqCQ06GvvWjtJtjApByW8e9JWHHkEjyzwWnLFRtvtdALlYHtwBrKPuw8GaY7y9elauRBpblk2+sjuKb90X6qabNF0Gwo4tIAGyXq1hI9WwvWuZkX/c6CRjzt2BplvdTk6sSQ591EjQtVunrcp1NMhXvsbR9A+gACJJAOyYdzS6tbXufjmGeS1Vk5iLtAvLREoYww0XgN7RnIWkDUmrtDhnjvPpzQFmd0/OJ1yicHwL3O7bSPPTdJtSqwaPKEkWZ8N825pCOZeTIfsO2DM93yLVije672ZTf++y2WiLMYCY5QANXLU643CEdw7eu+B2wGLSGNcbToeehhVwfH5Ke4du0RQ7q1wEs68exxsnPCUGyyDLl6ClhErDXv9ddNrnoBX5Pt8QjskI1ElG0iHcf9XEhJUJgSAAAAAAABKgAAiQgAFQh3OKMQmrC3asnzgt/CpcY2Oaefpqjf5GOoH+MVnL+LdnL/hCkCdsWCkyjnKZ3O+4vhlf+bmUPtlPUiUAbZG8EgNbQGnu4NQsR5w64bIdIoX44ClDUXjkCJnmb5jW3pzBb2w4gAAyXGw+0S7R/czlPNk9uLdBkGD2YnxR2GhTW7yCmdDhGZaCXa7houwuKfYdVBANRCkPkNop2UTDZm/Ksu193P82foqQHecjtvHio3vfexKht4uDpEJuYh/lRGhn/FbQkstKJFHT1blArstTbOVcFIV+lhL7BbOZvZ8MWgEtvt2HbEzjYqGnX3Z4WxC5F2NZpMTJeqIaaia+8BaT+9D2Tlm3Nw/NwFSgzHVTEK6QPXGeasBanpkBh+gxlBFYfK3QoUUM+mfkPw9Bq+mn0At9/WfbVIPPI03G59zkw0+kEJh+j4MXf9SZZ6AjqvqI8c2MZu0Gs/sF0RzTwEj2xx+2TS7HoUkuG1DJbrJ9yeLtvH/e0x/el7YfL9ckk2yyMBYP8EA9Oa5PrgRaIYWXtVlBlBaBwLqxQKUApABYIT7MDn29n3uK9OHon7BIVmSDV1Ko/HFkmv99qKk8T7R3VNwZ8bdq8Nt50k7j4nwGm1BSVJFa77V/snOtoBChk5tHyr7T7FrJjvaUTZbAXtllOijAHbnOWXWQzW7HyNlA7t7hNsotwYsUdc2j4NfOSZWi1bCFXc+F8eu37H4dRHtahQmjTNbLPoWWItcLHWcFwSjhRupOZvRvfx6dPOBdy/LqDfibmhIvpHmWj3OZcLc0jHAoxFAPnDlm4w+U76XJlJ1FDsuj/u4H4VK0I5QgckIsH3v8dOu0JL6bK+GkHCvgq/oZj3Y/ezYSUjRdMqaXWtkmKzPmxyNlQ0qpYvwgvW8AenT7yZ2FTMdeZYRgAAAEMdL2+BF8rQhGvrdEQ09tCqR3nVNVYB9VrfGhHisXW1CzJHjXuFBBUGhJP3GepfDAERGRXn/iNXqqxHdDb+HeFETA0ltCMxC75uZdosVDrTNK7g+FymQKDbOppurlnVYwfKzM9BEVbGPHjXmvznCvP4F8iAO0xo+wPPutSjOyf922VM/XoD6klfhhBGeVNo2uBPiJS3xxLE8VaSb53atPVzEllE4LrXDpwBtM5GJjViIXkdWY1ixdkwFkArPsd9Youu2hne3KUQRZHTID8HTQkwO9dRBPmaVfiXaZJnuLndbsPg/xbKQADZ01n5YOBvlT1hGv3zq312Zb6XnfqhvLm51ct6W+3e61HBWfrj1BofYEhQuJb0e6HGEHDI8ULJINA0nPsbB5vohAvF5pNTeWa0S1I1Wpnv7A3tfwRdFiIi3xrOs0SHMls+ob6RmxSZobmtVmmEexTtzVfb5OUvrkMwQNfm6KnEzhstl8ietfaKdq8zIcpxJIOJGrKg4I1wxLfp0kXuYLxNuMPvtrHz1b8fLCqiODJB8gjR4WFROsF5cSm6HAiadp6GqW/qRJXoe0mFS9qHEiPzOIpqCOqDeOQeZVk5XQf9nNSB8xqw1sqiRJD/nmkkW98CujdReO0CaM1+jgXixWjSLdqZu1U0/Y76Kvu+7GnMnp+nQg7xhFqGB4FkY2oFmvuX9T7rik+Vn0VsQyviPVr21OeUl4WDxpZGwVUNa4WGPXd9T/sTtf+9xopeeLXyiMdMs3D++q6AiTnVx4R1DM2t3bV/vdpddlwDAbhIjg2UUdNvunRqRSEPcw+00hE6bOB6N1ylxbLVhHtww5fXjVxrrza8A3MeWMsoGhOTQAz4p9gHb1OVf5KJHWzZfEL6v/LVG8/tIKBA7CpyPszoKqzT6aAjv3wFGpLivujTcIj5vPjFe0VfPZt4sb4D0a5cAgIYs1T038VRGCtB2ARAHmFHLSncKcyrcKh/oHd/nGzC4xwJedZqsWOo0ZybCvF40OV740QsIZzdxklAcIfR1VIOx4C+dcHizLrav7Fo3kExHVQwPbHPrGmR1UvT1wHFcAL27rvcj9cPohGm+iIV6Xf/ckoIc43FZj8GAq6ZpMWYekATB7sbcwkliYK7qSQ6Ev0YmW77e+4sfHq4A46KdxJoUcoo0peyZOJHvQGSWK47sev2vzQ8etfjCk8mxQ8JE1TEwTeAm+ZKirdq7M0ptvVThO5izPqVZ83aNI4w3/OSOvgilPUAaPhRVKqYFP+i3wrn8/oHs0TO8o9F3r77/8KVYvd4rgoY89kv6rRJkLtvhWSJ0mV3ysB4ZXSssbLBVzwcnc26Zom7pqzDeKuWMQJ/cEYBtq6cIL0+7DKppl+HK7rJUFZ6jqVVSsIO5vimafTHusZ767MfTAdobCJREvkVZkQbTLwq7JsWw2HKWIDSXHkh0TtcNbGo/2sIO4QL7UhV64gCX+rgvqFi99iN+STrDS24FdOv0u6UuVb/gE67Ezu2O8ZHFQi2YVVFRc5qyod7tOx7ZvHncOJCd1vdN7A58CDN+1+gCsSdJ+b92F/Bmjvd1rfqVUXCeJ7n2OtLNLi2G5lnDZJL7df3TNjbqZIiFRFFr/r4DvDh675csNNDIUTmBv/KGxhNW/OhP1DMcvC18STY/4EKR0nVNGJkpjWke3gRe0x3imUCRhDFwiR7UIHr3RCrkPU9z4CuIuPDp0xh4cK9ZSjrByaUG1ujT0eS2S3zbf+FV3QWu2kLQ6DiLmjk6dIbsL4Kj41SsSuwpVheiWoVF3slAZEiGW5QWI5xBoOX0jJsSIro4uzvNgw4MVGtG5hHbcWb+aUIfcp1qvZe6pI+snxZwiDp6D/X8+bBwwMf73M9QT++Hf6FOZjE94MHaq0X2JrqwvlGyMLuu0iPsSiAMP08KG7usTEzastPQ6euxw7/vuoNW5kxjYA+QiVehraHrYiZ9ZjfYS47sKvgLJ++hYVsxEopt44I4L+R9YQsExVy0qaqKYa9wpc6DJLChn4fTOmc4qfN8Rr0LXl23Nj6tdZowqDRsl/925GMpSvlzOJhvmtXtY5be+horEFKynYQDIwjF6J7r+oDqXSsN7XtXZ22BALefJ4bA2UWidmCao0IiLj8Lt21apVcr96MeKj4TZmK2/7qcFHtsUEvx2sbGpVRfaJS284daFQ2XsRkdzK/qr4feixFXufycODyAYOBYbhR7fjqAoDzjkvM6cCbb/OxPdhQQP4+akKudygkZatJ+S6I0f39KETfqG70zG9pSKpEL2IHy4hxhRcamy37xuB7hPCKewiH18PHitx9XbdkVPRXGmw58k7EGnKKTdmUlRCVKEI7DFcpTUjcVfjeYzQ/uK2fMcmiIu8ugdJArBd5kXNicDqTA+lWXX6GaMgnqGtlIQfqCuKZlvtUOttuD37O6XjGa+v71ZyCSMzgfmhc3ZRDfW/IQrQEJlkQPXuzvuS4e+OGbOG1EWZGsV93Vko7qHO8b3/tEaS5PumDjUNGlprPZkqHmyEPYzQXVb3+PttG0wZgl76ucLtP0J5kd9TR6+pnPXuIR7hVT01Y4TrcvBJoXdUexS6jUyrrk0h2AG/oII7NlkGVUMPbxkOpPBnzoHQzW7dhQ+NY1mEL6bOh4R6U0cubUjQFOg9zbimiYmaHWKtIUwVBCKq2J+gNa3sbcIv3MZS7ecJHTPiKMawh3Mx5/4FY2eJYxngG9tAdq9uLxbImvgRyjv6orYAYhAm5rjpLZnRe85wBSYyDgrzH2SUYyj4iaSrJXy5ef3XTEAcaEHiP1DBlqjFVrKEru6k0ZSij4xKwpnfZ4NvlyWdwVp5Cp/gHLcIGs9yH8AVWn1FXmJY4ViKr17wqHZM7A+S9cXvell0/JpThycmYldKjLzxVeXnkLrZD4mmlGPWEiKe5aiMvB5SDdCRSFCHugv5VIVODjvoDDLU0k16QmGd8vJ+6dT7LaaPL4Mk7qise4slFabCsJj0PEUu0d/u1Rsxnvzi1q/hMeIaTa/cgbkKW47yTq09+axX/ZOhv1sdeROIWjaGyp5PbNJWcwNFMVqaiwNI5XM8FeiTjxF5DaB+gnND2UJuBSpnKdXmvkT1B0F6LVP933IbwECbOkOGxZ0Um1oHb9W6R6AwSzuGizofJgCrc2uLMqNgRiaW++hw4jzLAbWs+Bsmp7DBNTzv/AMTv2FCylStBOBvw5PNQlqE+fSQ0P3XnxOMRdkie++JaGO/J48YOuuJjFcIpZFGWCfSwuRE78vODdeStnMLf4QUMhlcYgBbEIPR4v0isxF3XHo8oosZxTBItKeXZpJaxxIjRZNr5BFrnSl4LUgAlIU756QfzZq28vQyMqEIB3QdAhl0jdgNsXTETUFJHMYi76a/i3aDfoSC4dIgWj7AB2jXu/WU6iCOXhBiO15P3ZAtdHUoK9vHplON+xIJxSKkfPFhiqMMCHwieRwFdTeSDqfF2SEKUgjK9Ipj16YGPkQ+jUwu8G1MCPoAqTkosE0lWfzVflFI/FP5pVUr4FXX+Mv6xtcl+lNz8YFQPhxZkI5heohUGrgZicDdnK8YZaWbyjAP/FcociE7h5xsjVBLHFNzXOPJj5MO5oUJ8RcwXx/nnp5MvlLs0i/LtGLYbr4uZ4Erno93Hc1W9rJKntqlktwTMSAoMtmGgQPeoqNN1bjwkwgb+5BBUsRNC1crkf8kN69OcUzVKCx8UgSkKsiDJIVdkFLV/L5ka8KODJ5HYtKEfSYRqWuicxywvG2XQJBG61ozi9f/0T+HcnlzfAo2SZkbAdbmWafV1gSfIZiDidBGv1YMwqgJEg8G4U6UMEM6rPi45T/7+m5OLlyjzgcYW6SOUZr7lLZlfcWeBN63vT7cxQhuLOxc/4x8rkRvudVCev7hshze+uGSj7WvEAR1knmC8eJVSPJ3cUCI5qw+wxjNHu0qoRKPbDuJDVhPE9sHED/WaUNEMG9EFdDdddTvM+AmN2nawLfGemEgyBpKZ2Mkb9exoPI5FyuAVlOA095/i3GIg0WXztIlOt7OBz59xhrVZx4jfcG+NkyvMNTlKq3uLV8v9voK9kV2mLoAqToPNS/nVxsTso8jNmGGoA1+9lNVl24x/9KC1kLOSWk42etEarajygyLGmF954YuOBRmAJU6ZYJVvnXRnbthntcQAQi9kjNSw70FZjZJeoVxhDZoq583yGpQZ3pslC+2QK/cHznQoG/gybHGukrehAIPDICx6kC50httYKvo/GabgTk2JLO+VXbd5SXhJxSmY/OAz84S9UL6Subr1cIarXux4DKiStSESOzX6guIkwpdbUSLj/5ZugzgswqFBA06y+Jp0SiSgf94t/rSx8xoWwfJqErwtwwCejNoMfkFNjhRPy3RJrnEgGR4HP8nrhAjFtzMPjEQX23+/RkDu6FN9nLrYEbLXu3WY9/A0dN5lbEqffWjp3+qLgj7nRP0F6YAPFQqEic/3JiZqr1U1tU5zIl2glWkrn5hMlpen3d0/AkWDm+NkaAykJaqwW757bsOs2oCxAZvVxA4MCp17mzakTDRy/AeiZNw4s7Ul8NS9oPRLN672CHTuh/xmp9T0d2+GoTH8ZwXyqVyQvqDrKTOaCm9IKyFE7a9QFyfmdK/jPcd8TwD0uGtZdGEMOqr+C7JWIAmslFKGSDd6uLy6bvV5yDgWFGPHH5D45G9BuZzgRbyNSkjp0r2Hu3Bri2idwLmg9B5m7sVNI71XpaPEAHRQCG8638LP4ofI7/df0GyZ3t1+RyJnOLQDiUOo1L/HWmcFU4H9nIHxaz9oySq+8cSD0fkkBqufH0MB5VjEbAhG545DkY4ZPi1Bc9sVTDIQ+Ip706zfG0iNxHu79fI4R2fs9cZskdbceCwmey9YdSx12EpsoaYOrTuqH3yPoeZgtMxUSv4dzzRDuV1VD4DdReYaRFbGEQhTlAWrweNQec6voCGsOakZJd1UJ7Xd1NmPMSL4pP9zLaNfhcZxZG7fSFRcbu/5tPWjTg5Sky5cdtTRyVsASaxh06REwea8orC2JfxX5ZoHShdmTpzMjcg2yYhq0JfLBorqyOLrcmjgW8NHEh5WE1Oq+w80P72Q5A1e13vCrrHnnywX8oeKMtEH8MWmwFNZevhUrli29wYdoxiDVamXldHNfpRqXVosdZhhu41n5YzHHhBKZFQKy9u32sCJNUEcM6C+uyrhdocLyFinVE9EH1VIijAHL4jDactdTYu4ImhhExN9bqezibGIu2X96jPHvIDQKL+PVnk2lNVTvNA162Ya6vPlrdyqLPbLYRiAiVgd1kuJ72bv8urx3i7DwYN6DMZGfXEpxJ8rNxPQc99M5kEQKJvvypmBF/XH29KSyurvNVEDoqvNuCGnWWJiwt1NuIGadHR3/CqfY3oZ1Do0Vrg7iPa6ItWYQv12wslWPOxvXB/QV5LRX2POeoMj0RowX5xpC4HFOue41h6gndUEW3ul9WN/7kQEZOiH7oR9UPLAwkNDQbM7Xvai7yiQO6cSap2ZOXzFoWKhBYByAv5agCWA8lwkCLWuadHd3J4+tC7h+1ToC+IhYQUPkxFvZnD/+61NyOe1e4n1Ng3iub/GHCP5UvOtDvIJKArJubqdAis5HypBIhC2DYk7qL+Ikro/K/DKBxJAaiH7TPVFP708hItLy3iM8VbsiXgoD5AweAH7wHjAAA4dMAYigMjWdq7j+8mXQCd/aoM7uoRBJQ1x58CSv9BFBcX/5g7RkP4EWKEFslR9QOSYoazC1/OrTozDNXKGU4GWw2dYbWOAd99mzDiJswqFHwr7Keq8pMKdDT75Q46YhndifCbE7kYlHymPXaooacl9Te4zW5RJcbc0g1f+lo7ue3ojVlwXpvPlZIYRDs/Ka51Ome6X9R7vMlaZPbCWzsFuamXONeXKD3l0qDFr0UDLtjDQSLvsOVaORUB9X/8j3bLmmCdd8jcQZ6HPX79wivz3mhsQngkHOhwe/CuHGo2PQz1QqCAGqPZlC5Odpr278OqfmTYij08XnXlYcGxhvKcdYN3YjaYP+/CHDGrUxTvngxIeifDBoAUjaTj46PgVnL8jlnamSvW0JI0RAib62z87JQuaj4xw6ilY6Kyydwy3cAQ6b4FTJH+dl4+Qa9NhqGT8INw1ZCCwVaQ5lm2eNjo0XLBbMhNvwFUO8CutPymmV0POPYrfxr4ov29O++S9o0VVFbHetPeTQOps+5rrAlR7V28MfoWj7jG2e3bPBZq424P8PIOE22PJvogePd4UfNxgh14109PYt960Wvvv6zbKpSd1+YLJPZ4sEuHPNry5gvAkrwjN6z1hm0/6hbZpHjaYaVuI73YSBNggyj/QqlprKmR33zsDQObiRV01yXLEwqnLWq88ohlFlG/ptn6cXXdOPTrdusiWmYLP2sNI2bbXhT/0v0+PwmMSClrmhPf4w/oxQ5FvAv/SnL7eNnQ5soUXdS1OCaQ4BAoWMm5BNPW5bB6yzO/SrDXxJsxCwANJ1esXKOrPuqcdYIWH0u7QKOU9GZ+lNQG+qVx9NazedTejoiBI3t8y1469GRhFHanoortcxY5RMaCSdqS+fwCf5Y8kVxF0FLDo/rEztJDGTgk1XoT0mf/HDwVsSFufAFiQD1/3GgrnPOF4xJWjV3QhkgHnSzikObGyhwlX8j7uk5vBgP8Xf/n6QIq/ZDIcryVZZNaYejr7Bk8wVax3fUjatBzbu1sXtZ43Drii4zTQGIjtqY5eEghd3usEyB3F34blU+lZpZBdpHzHoSQ00Jw1tV8W9n9tReyzqbNiOqOK3wxS7UYSZr5lxERMT/Oa6H4gUo24s25W6sJXhFzd5bMeyHQ63dZ9pGWip8ivyoN22mKMomHkOYOrjtOi+X7CFyr8lo2VOKFxR28QIwkDz6JYKhrk7h9p6/8QfG68/bdo4ze7S7OwJ2s1cF1mZsHkHxUCqdpfPAVb7LEQS+A6bH2OMM++f0nlKntVn39kgCtevNq2rNp8ejx7urtKeyoQh/kqJozLXu50iqKzhhdE4V18lBGC+j04TLQPrEc4I8UGLIUgcz2fhrywb4jfthaqm5id3MICE2re2FfcWD0c4OlWspikuCe9kLsMruSF6+5pXRDHfW4NSHZ/DjX9U6OzKSkHqzK9UGVQ1JoHS2Bqdjkr/fUxp6H0jgoOpfSXA1SU5GfpDLB0eHnJqm2lHjXuR1TI21/Ub/AlUHoPeY3Qso0H+c5liEMvBW0nrXRuoICpkl5S/vn27ogQPULrR4hyNckLKv27Fz4OoDCO1sbcKBqpOr4mK26Uzeoe+uw4SleoVNHJ0p6wytayPUTJU+dz5G3cwPQg/wASkVsKzVdT9Wm/Oft6p7rU+r8H2KN7+YN28dwF07fgF8EyX9CO+EOrFKZ6ess6QBrygVig22PYGDhCRPTCjTHyN9uG9F+nRD4OeyX9mwuU0lzM8DGHYCZPjIgVozqKdne6nL+xweva5jSJGrLaIhDTvhk/kNMmCD9gGUiJMmk+Tk0GCZQbAEr6rtPYv7qJJuTJTf6Pg45FaWt61y3xP7ubcPkwj6TCnv2cHkZcwCGXp/nozhdhd3HSzxUsn3Ml4MMmBFlYL1tbLptmOG0iVOsrZl1iGhfPJaOzCLOBaFe43mE5FY0LyY2U0AYC33NqC6jqoMegG9VAh1IiTm+YLDuybImRdRZe89nL9CCRcGAmZMLg+j+JfDJ/xVm+exFSDwYAfHxEKp4e/3Pjn5lYuRbqYU88o1R7gyNxKG5dUab/Yi+iwmVk9Rd9+gb9ySt037/I9xUDK1oPf+ZY7eHkD1xjg1W9T8ZqYm6zyzpz7j+SydJ8wBwzi/znJofSw53L3uHXzn7jX9tw3TAkuvmFf1AgppSvWDMWOZrZCM8pYSqcwDdxEUfkGawnoFFhqywNaWWigvcm4VOMLQdpDpWL3Cl9R3TVP2K9vU7kFG9c1Nu3vX/emdqtMNwNoVCpczCE5LRC23F7icywO+BedGRZbYUtaUOVfCKLuWvoYSP5fEcnqiQ67vsy90Vr1xauqPcuHATWILGiegXCwdc5bmq+mUJ072dEqiLUYnxY/hpzOZcaiDBCEEnPCikFHlsGQnA2+ybSlYufyj18dkA7YjLgJULCcVPhISFRi7gNiFz2eC5HN/QO16A3nJAkjiyOSFZLtxonqApumV/z6ngqYuTqkZTRfoxsmbzmZFD5wNjEOl+f3ZAXsFDeH8vIIfDtQpb68+jALM+BE+hau3dcBCxbqQJwnb0L5f2qJBSGaIJyD37QTGpvMejkV5QZe4hHiJ0OY4Tp84v2WvfuWfE0S4TROy2JyE4S6rUFSOIr7+EwPBg7CSVJwREmKDI0TWzVT0hEqgDJcYgB+hQCa7snfZaMu0ObE/hGPOuq/8ZjAiR9kjsJjvUkFbXjX468/01LRqpbsAOnCd71rTcgtEy8iCOSZYIK+PAOV8IgJ3v4pCpkrBx43OIzijQNA6zXvboBr+Br+JNTqBJljaGrsJ/x4RSdTireHeNotzFskh9H1smC3lFyshs9xlwoophcCLAK0mEO0opPdOHP9JajTTbf65MMVr41nDj6BMLlF99pDykI6NzgMvJF/qqVvONH3p5c9LnQH5pl7y4vt8WZOadn6zPaF82srBZuB4ftFVyin3Mf/6yxwzoSISyt/T5TUXiVbDnYrpthgnPPsizN5PNZg75l4xxOsnCX5hP+4vKzf9WEvQV7ya1MIVpl0QQPS7PrKKKSa2jowXTmwyEMfPLhrdmQVEj9NGyzPY1gI3qjLZFWZB4gAAAHYqZTZbAPXmIHjcVdy7k8hWArqFVcA2liqmsvBQYLrp6TG4PQW58Zgb/YIQzP97A8xMrwhoOcWKSm4LBp4iDzQME7oIAAKnajyyW5j05vX/kwU7EhfUBRfsHPbYwrp2JhK9vru1ZNqLKwqce9j2FeBwPZBLb5twWGdM/3fF1mYzVS6bEgQPZ3p3ScHG7d7iG2fDOez++2qT5A75ajAA0FNJuNQsSs0OqgjuHGV8aEi023qu1GtCP2s5VAUnHG0eBzzyJRIu/U7MAua7+AX9WvKjBJDmP/yhaGf61M75QeKeoKvu9pcyDH3WrMvJbivI/g41TST1xC19LgX9agPsdhH2RiMlfKL9K7Z/hyI2l1Mh0PqTqtj6kXl1lEVwMSOGtAFSpJQp/KS+PXtVLWKqH4fyZxZeYw1Q7h1OauS5G6UbrEJ963cfZHSpZBUBslWA86v0C0YL6IBdKcTem9JDzyVO1Bv1/kpC2c/ADkgjnZJ/T006XYxyQMusu3dL/ZamG+XZGt7oqpub4g23nqqOcRYADi8R1rTLFGCXnx7Aew5FtmKV6wFBoc+6Wazn+lEUoXl97utmXm2i8sbQXlcbHBITjz961/HqIFqjQQApQAPL+2jjij7FAGLAAsRIHruGlx2wdsFxrTWG2m2Xy/JaHCXd4dCk/YMPlJPemdEQr9O32l8ng0isIPYH8yWbFrQzxhzSnxhZaGuHj9AOuhF+EiuYz5wbDudzbJmclYxodYjm1yaHwQYkrhZEw2I4ECuPg3lqq8w+zwJQWYdk0jkL7b2eipbswVrJ76QkW9/+ljpzgo6U22N2hOc2LU3PmnN4/7cc8pwBU3QHclrOc61qDvWxv5f4MkxC93HyoHBBUjmti3pPjP3kEXWDA1qbpOIPFLnzk/GthMMHUb0t8rERjh5utfykOo1dSGXiQWc1FJKP804+iL5yA6zrB55hJ6+BxG7FMR2Y9jzOHTI81GbAf2legtSMCw03Gl6fJvSXeyCeKsg1MQd5G/S+D8MrXv/efe/uDSc5G01zaoni4Y4VnpLAUyuHZfP368OkNjqTsiaYdSxLG/xDELT/IMP4ZXeVB8aPDK76fvrhU5saNS6zQInZKnp+B4o/FH+1YXUhJg5763T1reX+vUgQmV+71Cts9LRIvsu4lCBwy2j8g8oAqIC4JcWEcyECb0Sj2ZZFD2/72iTg26X+0DUKBHMQa2M/9QZ95NtPPXxGO+cw6NfiX2uj2a39ERJnnFeYdTeN4MZGIKvLtWBHh6v2Gua3PaD79n8sR7N/7yIxBQ/9/fMXsIztEBfCXaz7gYTB+VO6DYypHh3JdIHmBISc0lKvVJ0fjX6CJZWZXJZPSdh0m0BhTDs+529JXeZfsscoAx0QZDZbSuqaMjr9+JEymtkjtgs6xuGtezRPUAUzuN0bAU6VYKqvMbs4CdeYpLzwVI4ZdyGnPsDvJpO6nE3SQ2ssEp+Fy8rHU4PS76KNteCFUhzrUnISAU+g2CAeGSM67dF2RJw8B1sb0AQq2RMQG4KyBxQFM+l4AWMxkpcLBXAqOSYKqzqnqbF/r7jneqrwY/o6dNwG0fbLCUep3rLimbQVy80fNOLcWuxGbiTXQp1hRqCplNTE50pTzjOCe21oDp6tQONXd3m3GI5DNU2REACSeA19bv/BvpcWZNI/PQeiItm5QGbAfWC7Y6/Jvq9d9mscoBhuRXvHRgOPTvpzEvb0d+CEEFS4eLBBqRP/O1YVigoIneFEt2oFA3ngoCjYJLTz6JIAmasBE0pG0cOO30DfEJd+kQWWZH0FEw5OKD0Wj7gKSr12U+l8RdlGHVFRt+uVInlGJ0FsFrIduxOZp0Dx5LW1i+SFxQ10nrMFy1ze4vUYjSJTaIH4CyduiKXWSCWp6ABbhaugVvEL1Z/A3LJMt6fijL5YW0GNQ41xBd/Rpx+CuHM7M2kKPXHeN7n4+aB++DzTDpGnjDFDzAYvMptIYiDyELLoO++caMc1CpxJqRt/aVrTkliKN4urk9M0H+TDGH/dUjU1DJXjmiZSAvzdTxUcm+Zt4gp9bg7TZV2A7ZVjoeQ3zPaYPY4NKB9bO3IOgpTMBOipGbsZINZrRFzx492hcTaEzrgBa2csTzo6Jq0n1wJMuc/11R4aFO/Jp4vDcuHsnASkEDLCLOf9IiBj4v2FtHx9ozlcNljURnsKShHArEJRP4sfA8anMFdDz5HNZQW/lhyWNHOMYM+a91qS2c14raQlKNhbBu7ibPmrcKyrVsHLhhmMbflp7fXAEKAmamuI6nAkQAz28+ufGannYSLtVjlgyEHWneBFK2Q1bH/4j+RVPMM0vtq2i0rgYS3rk4/t/5cdJ+V9HFMcAEz1zK6hc/TpaUC3RwP5bJ3Ea8JDcqBOyeZVJ5cJbkc7e38xWSn8NW3pgF+eiZen5rxEhIKY89l1eeOPTOIfqrhgpZ4iWC1Upuss3P2bl4wSFs6WCFM814DfQmL+VVbzcF6g077+uPs3sz1nsH4qb8PmuN4hF52qRPivP79uFNZBVlvQ1+HmxEFAYBORRjgoO1IpvS+2PMy9mtDUMJGxZ8+nV8QgtVIUwW9BYI+QVQiV0vpCyzx+J9u4IBGy9CU9MCH4D57U83bH3hHhMI8ru0hnyrFKF4XH4WmNsTvLwhqQkfoKGkqrmRgygQtkhZpiT+Z4VMnhu2tZEcZDw9YFnhY0LalCKPu+il/YO4G6e2aiXu8y2NiuKkKGqTVmUQAQL937HWuwP6DycdiVIV+P8R1MTcNuhJFcTrP0Qoxkc7hsL9QrZsTsdPa841irWdY3pIpZvsmjX+7baDxuggbU8tfHf6ta0MtT+wAagt1ts4PTwFlQ4TzQSFzksfDSbjkeUx2j+XURcIDBAD4bHs6bcl8F/gDpgBb0wedPbw25iYJcxqpSsmPBsEGu3yDjrxqOS7ZC7KxrhxInZv6IrW8dSvbWt+DtMkibu5b4xqz0gYnhEa71/9WxGpcqiG9gRrVjTMbl44Cl+Z0UPFktJt2GaBFLNLWKD/Lo+UJuhUpGZESJzi1Y6GtGpjyxnCZgzudww+IJc39YUFxyMyEQqrK6ItDMCryOAOnNdE4zMgKGJeELcDtjit7JnTzG6vFV+wY4mly6dSSkvZ5bfqqYaLw547Q1/8RVBV2RElC+b9DnD2EVQ3J/yQgNOuSDDialOINfUqTzX2GswuS4OsAfEmUU5mWQoYELPW3HsOPIQ8WFDBdLqJzRMKvP0iloAjxImCDgM84yL/909WVrKnGSVvdAlLtMDYH6OlyitD9LavqPCDR22GWSjc+9kUWq+oSSux8vaiidtpepqwGkAoa81genxriiCoUBUTxp4M1oeHGJZw3QOPRVYjBYoOz9IzsM2Wh0wb8P7HZ9evHWNPA/qSnMp3dy3jcMp6mhwgPfBKJoq1PN2xogjvmrWljE2/SEX5PurMqLiLrrWeu6wLjKOjRPEeeDSCWzC8InvPprgtXQPBVIsGDhog0BzmMrzD9Fkkocm5Snqni/rYpCimuHspeJb+9lbuYaIpS1DLVmwTgKT6uUa98nXrUqWZpQlQ0FpgmnVJ3EEo2CXPodBdgZDPgqO1NpFaMTjRVzdwemc5379RVTC3mQLTEchtVAQGQt+UNur/hjhuVu0mBBaa+GYU6zhM0dEPr9dYpt6UuqVi0hOhiIq2ar5REi8jbJCxcOkn1H4I/zQmDrbKd0zkUBZ2HW2ziZ3b2ZLAANrR0+bkI2kLvCn1ky5zxBqoels/MFB6NYMs5ZNv2Svyo9dK7MCJP7tqapCL90zBXWCld06qiJnQfl8ayeMi5fIMcfcnTLyYmpzJQJ/e0LC+EJU/kUhlKbcacIymGkI0RAfXDzd8N2cPreuQMPxsOT2BrzqLQ3Z6xFJzblUYtp+L8qh+4pbLjkp077J1RkGPez37RABw8aybi0udBTdVLKqghG+1/Fo6XQtzIsUJWrdib+/YlifDI8Scymi5veqBKI7ZvQ23aFPyjT4ikASSRJkQpTk4md04WHBEQG69tNgtSHDaGIq3ooHB00H5352xr7kuUlrVLlNSy9DItnaFCMq6hMxxGpj3sh7MDt1jyVKVRHbMVyNVJTRcci4T7VJFIO5MO/H2lmwLxCBorvFlpmIz825KYKqL/yE+xb+IrdVra5oCf39R1BcWrv1BQJWcQAox90m9h9vHFTT4VvZICQfG8pVWoaT6gWZk/L8MZeIJgxJqfAZ95gpNCbbPpDkEFutXK032W1kl1RQL4lk95NazQiap8AZk14b3BcwELNcFB2RmAoVOCcYFfHThVOQUIgJTo4NEwk0infUszcRU27uAgv4boGqgm8RE8bQiNBtZYtLCJHoBin3uI110J/IFMlUy5Hmh5hKhhegk5OsxNtWXQdSHQxFuZrwzf4WA/gXCLy9i0pqy1fvXTs+AErt1lEw9Sc+PBBU2I2ki79jBWi54jEykREfcIMwyIBDxEH6j+ph1yQwiyou/d46fvHDvX2TE+hVtzJp3RhDXNq+87PzxetDugRlxGqD06JaQZGG17nwLbYgmVJkYuGOLTd9ApIlKbkMFFce4XgZZDix2ZQXrpYo/7JnUJa7m0rk5hDFRW2g/JjDWQjSdbTCtPqVjOn8zNKvThHEX9MvWjSKcKuf2zCI/XSG4t4Kvzoi5lk8XJS/gmSTMXYpOia+IiU3OlfFh1qIlDsXBVV2PqaIyAUfp2YqkKxd0fMIW1P3kVt2A7+PgrHzACiHT1aLr4qkOzBLteiUjYbsbVqBCcJibEIKUB72XkW+RQMBGACCWio0UE+qsJcjqzjXMU7t75Qn8BmzxpmyspzYAEVBlvP/8H9g/wS7onlrbnwOxJwWOgjGKcqctq4jVgbjVDMRKjJf0K338iGzbdr6jiRwU9lGdVpZRmjZIQYH/srW/LosAR3lvYO+TqwvbghFdcOWBW13pIDUGAtcAAF5H0PHEJh+meZVzphjbgOCKcjxF9Xvu8z/L8OaexocybLQmP/khLAEzN75UZa9cyDie0ktc5RH7+qdW2JMf/E1Gxa7k1+i5/fpaWIZPk9phJWxYWCKlkcBaC13DTGm6wVgB7EYgBUDGFq88jSB25JrC0NbZrGZITX0/XFFaRJcPC1lRJySfM7uGiNfm7C4p0c82ozgisYSW4+USTjlBKgcTbf+dJ0LIWMVHVFi79+vI7zdVqL3Oi6eug/phuEv2p89ZOHi/3AUXUIYURQUkTDPADQybRMBx9LwrVOqcn+vak4iIlOcWZ3GPgu+8ari1Z2mRK1RMDeggB9WoaLTG9R64hnmr0yoWRf5TqRXD8PcCTd8CYMZe07NP6DCM5BE75q9u4ccdnP6dHlEvs9wAtjDp5U94WfuszkTlFnCceCEpktqMR+YWhiMMztvEWAM+WKY9P7akTEbFwWfhC2qdfA4z+0o3vVYWneOsMeG2NZ9d/IzE33GvnxfsYK0wubL9gT9GaWvP44ejCONe3z2vzTWCq/FW2Afm5Elfe7M/BJzc0UEr74sH0/oOOaz7/i3j/Z+7dl8pZjX20I/NAMwIqbMHxBBGdtAXiHXXifIwrwZ/PT8kiAuikDaJExDQNm6awjJwDnjVymJCnRgm1lP7qaYCdm+D7RJt6FTQZa96JRjjcHmgvEJcdy1b/vKGY44KlU6JhzPGbfpT1pqTJl7CN0/pHyP3KQNfUcHqtQDt4v5KT+mitGhwzuoTe1OM6wSehYUPdde5ITfxgCJWNYag6ySszugxXsJ3V3X661/PTaYXcIef4OBl2TqquU4lh+6S3qiwaRAw+RQvxrfFzorTEq/cI2Xoq8zxh/6Fdz5gEcbrKRYt5Q2qYNpb9ZsI2LtUf+S1TpqAjR3CzOGP7LHFvbjtNy1VfuxlnUuwH/nZwVhUOIjjDGhVHUMS1NFKgbw6pIK5k3iwDemEi1sQ9h0QI6oD081WHA46UZ6w4II5qTu/9ayvpsaijeHq/ieyyNZ59FEyGDufbKyOFygW73qYOmcKAZ0pKZJ+WOyqDI7LgVRxwtqEnVOka6mS31jHVubEO9QYT7sFJReYxLDjdZKVULPYy6/YcSjhg6tWAQBsVpmdQ8znVBnVX3Tx9vyLY1lHb2sCH54GMZpyfPhAZHSZqzhq6PV5iKo85PDQQmTetlNdvrRzLh353/dA0ll5FsTa6wd89pSR1xvFVqgCw4TrKxPIKRGae147HKztMD2nTOMT1Jz4DtjSEXMTzGAinyhbV2o1KwHZmbSxsXb7uq1PUG+PlfP1kTzVaG4O1Xsji+7CJpijgOCBEPx2ocae48U0+NLACBSzqgaN6UiZWmF76WL1CBs19czbZsDXi+JBfrpx4rJxkyAz0CxyvyhlhDVLKSWQJn3V1fiioX26bIxpIg8Y+VokeMWXPadrt3wmc6su0NxIq8AMQBbK4ICh8coyL5ZGvAqsF7M0LiR/OwSnWrR1H/LffCg4r8HDNnHieAiGZbPKzOcyvyRCv03+ZaeOhqYZgXotNveRDfQIKyIxvOWhvEjJAcOK0Zbs6ZRr6NOhLV8oIrXJxBFJyONWHgpB77w94UwDsTGBjmSvYLZ1xKUpKYUf3UwFaKnwevcXhfosxl/xuZR/yPDDnQb0jWOXUZe0VE6NouQRJHYv5hsItvuFS7opxF7zJBc8jrvtp20EtI/V0pyMYpTrzezZLRvdRlEFw1t7ZOdjzDgKShDkS2qBi+ti9w8M8suxnlg56IX5sd7aX/+Bo6MuzM103tEfuoDtBYlo3GpXJi+oRNT6hMaEAIcq2puxxHWI2djtZfFMRXn3KdtAIsRDjin+T3+qfn4nFMFziTGuS8gTr4iEvS6V2bk4k9Q/W9ugHeq1JRTRquXoIVx+PE0Digc6AsJr0iLQIS196RjxhJ5poW04z8926daPCUSDXN0GwFKTxJIHjbyeKI/ocf1eMnO9s8brR8LhczVr4T9pzYf66VQ7swKPW/7QKjpbAjxUxm1icAbVPgwiCSljyCu5pJRr+pwgN9BYANsE1sOfy7UFIQ+6MvULU4fDWvibI9A1/1ACcExA6TfaKDrgQZxXMvaY5CtiiTHdmtB2rNlvhrHlum5gy9Yt1h103snMIuH21HLFWG3ud08fJL/OF4wy/IyxR+kKH2gocY8eNKJUsHHMkAPfIQAXwoKTPeeluoZW6+p+RdUOL5l9Cx+G2YPCa81ZmihYBugr5IxCSSouQQG3Q66b00jE2nCkcO442d9qp+flIKisBVrwrr9AgHMIMkK00uiQ/8RpvkrgmcFSD6VDYFSkYtOH1Se1LeCkJHCZKNI7OznOQz1StS6bkTLCyhNkjNcfqORpEjWTN+aclXNdRSX9s+Yo4IJe/MxpyHYD1dxzA49zpO9Cygb4kfKLwekqrMGD39/5H5fGYReRMED8nfucLSOg+kMYUam0I3WrZQdYTZsXdjKdpQB+bv3LxExDMk5XZuoOAcPcGhifbFY9e+IGhEhmgKWZ8Q7IqAvspU2Kg8UeDFm4K4detalH9LKmP4WCGkXIqaz24Sq16YbadMpGuhvghr+p6KeUmXwSmBulHNKZw3/LpNN7enOjBRrDojq/FSTwvX5gf0KLin+vynDyejamaThoZiMuVVgSCHlM9lK7O2vLpvvcWpOlXk6OqHvzgooSgXit3OoZuWz7rcucm6P4m0QzEUDWJdrZtzvzu0Vyb2i1Ahzfls74vRLaxUOIAegXgXM6PINL69b5QHMPkuT49YaKNr2BoNT4DUXxRUFNWl2eNHaNJek3o0pRxEN75367L1wGb2vBxt/hhpTmKm0blDwohnRrDEVsaFid6e+0310U6ZAxz1s1X/Xa4A+d5rL1x85mfuNo/AA7qBEL43EHyT9kCRfNwc3fUCP4oUre7YJJArsADaXzcalRS5LESq01HIf+l6MDcQhPQ21D03Zc5GpmYV9k1N19dsfqusVXad1Y/oDfziA/wBYZstaM3aHeq9tagB8GjLiWQf96e8/ZZ6mbempu01qj3o0DXdwX5MWEanovnBTQ+Z/EkrBXcqa9Zy0ox6CsoCpr1i/z5N2oU3LPm5OrdKSmjUjK+ZrGMtoMcoYVLPygB+NeacDWFkJPdiZiRmZ+JBOfka78V8yLCmDo9T2nQZMr7SBsBpsUYE/5COe9CGr49ssGEnhQK+9VmucBHz0lEkaMyu0B8uXe1pdCwjXLq8/3ZgVNcWXG8wR9BbPHLJl2xlFUqBfkbOBi6RoqyDK6kZYDccgxwuqkc2i7Fss3fGKwr8IHLVlGcyPVgpGWhVaiySeKypywDO6JftfpWteOhAAUd8j7ev/0Bo4bdrXUcqSYm4Ui+cAG5nTgjtPs3hdv8NmkW6kG0ivWBy92UGLl9BDs2vcYlv7dUsM03XLuQDHQaYF6QF4B7rLUOrCxyo/cGCpt5VZVUhzqbhTA0n5Qo4rWW9uZ/IQRo8rTigfLT9cLUVENc1s24c/auMbJFtQbHp4dIjcD3F9OruqjvVoaKYfNbXHKZbypWaeM0q6mZ7CHxNAGuv5YwOZx7UGLXI6E5HHMTlqFfWIUkmaBplVVU3JcwfAfZN6LXv1W5DsVDLZ4pRNakpl1LzqzZltLCSEe51ml0Sr/9S9SnX0c9pZBBbE2AYNleO72VHhr9IwuFjGDiZ97mghuzAPDL7wlPee1pjuH5o02usLIln8vo/xPnMktsvaOi/WtQLUOX5ouikaBFVLC2Y3UH67xoQlPyo9a3nu7JAMlQw1IldRQtO0bqx7S4xFcTip9OVhWUkMNzQ4nfs8NJ9V0DIucRGnzm+XMCGvh/54fDYK7ZWHeWrTXbGysNSMn9grWEpJYSi1+/YiZG5fso6ycLd5EQmkpgXbCE7itTJXK8XwwhjXkS4fsGJTzhOFrKWTZf1+CPwm2kV4fhb/FSxvr/YGzzwy9hDy3BICz9yg3YTvZV0FNyFNyWmI5kXGVYSv0f2oAkzGJXw6H7FP5M6k5JL4AyYCP46S1rYjrnntnhnXNATwb/OE5bbHcQ7rB0oblxdRUV5iZACBCMB1eHjmvVn0wqQHZf+QtUoCXqa1JnIB2/w3uSfrkvaup/6yznLFxv61iYo34hTnCjgHXuKMZ2fRLuzNyQ+HyR82qfIKjdbJKN/9xfRnr66W7i5a0kPjgmv2412nDnqpinQxPUELs3rSVyb+F07Xb3htEdSdY523S/AGxuyt0XYhv26USYdElb0G5uzV0unZYhtQB7tQUbUE5DTnrqNPw1QB+pfc/+pMDFDFisc5L+Yl8+MQnGEFVCGCCuH/IoX9Ox3tNETTP/45En048D60XJi21F5wJkWNF3ljpHqCUD1OM0Dga4OZme92pmQmyN1kJ0LSRUQJpzl2bREXmHeaLMyF+Ggwt1FDU97bH+vUfmSnUe9d1DO+xq1T+kDKOru7quf6NKNLor1/sMhDAN9joLL4fZN6cIbnXOwF0cpyHwW1Ri16vf3a3IsojpaaBZ/0YbaZ3Avmq6KIiE2off6+e/mVjaFxBz0h32Q52G2z9ITO9oh2Y6G5b1i0jnSWYrh3gU2O/iCOhAnky6SIMV649kGnGiuU2o0t8uP0vWwm8MtnyQ5MqipFP42dd+cvWUt4m7cW4l/zhC2bRDOFHD2rEoAWrBsPk9oxow4Yf2pznC/3gC/GYfRI693jSPtOqKWQKhdc+agatsMo56E2FLVbwguX2OQz9HC7/i9qYPObGbaN+7fWcRvhlG/DG7B+QrmUZRuoRcuOdtutC4WWuFgCzNWdUD9lyy5FN9QcSmOBFJZUck1aXcCIf+tiqvNvunYEOZroondLBNec3EdnXWvdTHwTwnPG5K7YZfkm9soXeLymuL1B2srRRU50ssEcTfS7y+/9qBBjqztY/DoGo0IubWns9UYs3j86JZiPNxcWG3/VFHYnk+uSqi5YBV2JPhpKhAeY2kbXNzlFS1VhjOBo3JWP60Ri+eVtmvhawfalC95QE34ZD/2ZYhMpaFLoet+Xoab2rXp/cOrFyxJZeWo5CDA55E/dmK3nDmErgiLP76sC1KQ9QnKOM3emfrmx+v6oT6QujJytiIOwlyX6kVVIwKwyNBB5nLRHHATm1fIsiFvcaZDh/54VnuEzErWL7rEIr5YrN7db1aLJazoXZQT8Pvi7N4utSuyhvTN4aBD9p8RTvFarh5uWLAMihUjeeYo2gksLkvnzvFCtsoSrAPl4muC6uB9szkrsY3xPGTOiE4etme7n7vxB5q48ilU/jfV9RftHDnjjvPv+1APj5PVVbnaNwOciFkJM9qVWepRJvPKq5MphfD1IT6rlEhjVydVbggSCyZ8jEU11uR4dTCVp/J7L29Wzg4Rj/MOedNPwFwF+7xVFVjrkzvXyg8hlKyhefgvEhs/y43tHv4ViRoEmJAl+uN7wmAfkLOrfv7XOGsvzH03T/+DC+aqq4AD4XhJF8j4aQICEPqhXLQyCyriRgWD05f/hi+KUfaJuImSufJuQycC9mwFKKfN/Pit2W6l9u/jGbXRONQdzyjY67rSjjRfcy4TqXYXkdhoa2g93yC4Y383XkHQkLt6rDGkBhxmRazySwBCWeIcprweZCZVGr3S7e3Bje7SVp8XyWTnOcKjLYVR//qBtcCfq96ox6VvYSjjvZdkUne9NM1DtLnYCKV3riqrUFA0yCqidrqKoG2gLjUwLy/lxil4VacCqo7ffrcamyFw7HGPHhBHi0EDh7TZuLktWZjkr9wKLx1pYiiByYH012t0Gvfq7/406K4jkRykA2PLpS+veXOdCFixy0AN96BIKStV8F6nXwH3lBocn2Ewt/kEBFwgCEuMYbZLeCW3go8MapQvLew3N1PZyndJThm51H4ymusCkptKJDS8VVL65bJG0NbV2I1vPv2BxYLTzfvcUz2JgEp3SRT41kH8Fjwc/ZHkKt9lh/JoZwkjbVw5TomLE61Fde0v47tRMlMJVOZc/Ro7fmxCoBeOKNamR5EYmSHRAK77Y2/RU1jgvlboLvCkAWoxUWr4GpDm6rhDnGcpEU7PQDHwx7xNmbhC2nlPy3uFcx8npQjRtuUJeieX9V22WQJ6FiRF3LIvfLMmizCp5BJaTl6xQavCiaeovN/xE3dRxzddQiIdgKaaJBibWZKz0xvZIK+AuK59+VpRFhfjunWe5B4hyWZB8DYdjAXC2RTy+JaCXJT/KZQOMYXHRMXHXZictJFRAY9S2XBzs35+9qf8GAJ4xNOSUMb5kcvo1gjPhUM/aNbvnSgMi4q/LBJ5oKQiJP0irvbYlTlmKpsrvsZQmREMQrKkKtiYyoonyV5/dwOapYL6wl6QbZru5wefIwRYHthpdkFECdrpsdrLiEJ8RPsANKW1R4LxnTi+VXyAPbWNGGYRHjjtx1CdSQvZS2AjgVRfrZKfJFR2gg3bXu5XS8tUoHGrzV/SPdaDja24ITU1ewax43+y5FbvxKWrfqSfpG/k8KlWBSX9sL6glZdF3quAN9/xEISXR9iwYShW1MxGju3uuxlrmdmNhGw6/yjCwOQwflUloky7EhsAR2r3iDlJdcFcra7sTtfjhu8AhGvnyChLGxwipeO/gVyjliZqERnOYlPQfIWScFcTin2QilOZunXkIsP8JgKs/Ti8wSCyX1Bki4/oBz7swKaoKyrQVj7gveaqVx+fhmSmd/EbinGVjd0nNNvesNerRm4VAMs5i2Hl+NOGzbzm/1g0auAlWZTvmxthMLdbQbCxlIarqywrqJBzjLvRgM4lBFHonOQdjl/NQH+2tk0BZBiarySaH+A116L6q4fxe1MGsZ0c6muVC9ESMibheIxEtz6OI48Fpg4nbytmsENQmOwHCqx4gRISZl2PeuyQR3S9qeCGpdFN/f4EQb+IyBzbMJ8SAKbd+sV7j7LL5dTm2xqemCTkmi+IFjIWvyn6cafA4XgDgkOe0HD++e6eSUkXls8908koDxax7LD+TPZBc3sphi8AdMcJxWA1r5LcW6H7rvAAFeoAAQHQAAAr72X1bv5SIA0xVg7AveAAAD2gP67E9Y5swtVaV30IqV3B5Yx0zEeGXHcmA6XS4FS2UgfBrzsL+OcMHdC7oVie80knibfNhBJZfIWUNkOkL1RiCKGvGUUuUerLyr9XEixIfG2hlqRkkZlWMiRkIHRjsqXnNnRr6QZZgJMJDWtvmZvXmnEZ/nF7tlzASv399cdCon+z9YX4ziabfG3lpmH5H/ZWNsmOUczB8LM16YaWw7OZ+3pEXXYntdCPsin9l2TDzlY3etiN5H3bZV1XWYTg2ALe3TrkfvHBm47ELMdnmyMmJPtxhwFSmxX2q2DJkCn4X+XluhLCdC8YmvZKvaL4ckDH8Ow35I1rYNmAUKLI49/jo+/Yu/KEafDCFXHDmGYrKj26NZazdoJ0p5OQGzFCeHOWnX3b5gSHNF3WnUmhVAcvwHEdnRW+oQrnEvPlU0SFDjrOzy2veZi3F2OoonRO+WfDJb7obOjLzLcK46dWSdnBSHb18sZWXUbJUGL1UMU+8zeYHg1dbnK3yen+yLENC7S/zV4bX3ZRIpkUMClqgeKzym4onK+lBxqlwnxTBsnkclx+eDJ0NdpXZrVq76kA40esClfQUsuY0wgGyYtDhU+Ic64wjOLYrLIrT4DZGTwU3kRZOOS4mPsaFVQ5hQQfd3hSDYutm6kWZqg8Ht7ZT5G3HwmMl4xveXHsNQE7nsTviNZbCpScCVJ4MItlnn2lc+lWLZdWgNpFNXGvEfQ+3Ltl7p/Z4j+tCL6NAlPCzdx1vjRWHPt5n4AiSJDM2MwqpXnmKIYHg9sfF6VKzxPSr+7oxQnpyUENjb2NfeFDv97XgEgLMIQiMJyGS2xx0VxL4bOpzw/nG+swIh2S1V3JNumG4fcNWWi/mNT9rwxQHGyRNWITborgz5hbFxIW0MCKfW+IoVgnLcbBV0dU9vB7xNtVfWLmAgWc88R5AVnYwGZOxKlw2UyFdHlYi9LqbE36hQrI30WetjKlL3oRG7lQhFKHNAYDXx14AAUrAAPZQsUcPZJSHhtl5etFR+zLxN/vVsxmZ747MZmf8dPI7EgbrglzcvYp2YzHLkmWbO3+9PkTbRBfFmO0p+zP8SRHVqeDI6UbTS/YEdp6sge1hRn4+2LFRnr35ARb6/VY8KqOgUebZccXrozLaxUfePvVzP3vKJZPlzq5E5HRupvKPVKbinMT1g1HywNJkTIu03ugxDOo4VJBPylh3HmBJIfMBdPZggyWMHEbtb+hnLQ/9L2gTSPDXL3rc2/fgMuvX2BgJRDXEOz4cIlrHnhL1MDJWf57SXU0S0JGYbmx8S0fba6Y8C/I0CoHOJ0/TX/idQL3bF/tpV/cZGOdmRe4fvfwys2xMcYg49TH1ELGPIfqLoHGOdRBKrIRZMRPDrE5c7fjxflU4ZDuNQcmRg7JQnl7ZUmf10ewuH8J/DXkfyU8r7gXK4U4vOl81omSqogiKzIssLvKqbzs7uMwJzAh8kdOebyblTnNniOuUSMPAjG+6wdsLG+qvN0R4OBi9zx5zvXoMO2gqvPs77VZj3EQH8qEBvlE18uGh8+daEQSZ+BqAgUAUnl6oaBHqwM/OV9lhhM5FCGWppGonSSWG1SH63I6auTM1d0DDyzDh6/FKIHrgwveXMQdiy0/21rklTuzZ47yfZd+IaDUScQ0pr1b1oXdfCUE6R5sXfcxyPcfi/cKLTLjUYk1l57IGMsrFCC6iOlAbvlQNIq96gPWIPxZI5nMq3G0ok+CD4DdDXS5r38G/aJOOuSJT5sCbe5BvaepG3RUWCgSVL900TND4cpw/l7gSgQuw4VzdYsDm93uRfrPhuycqzGTxN1kcml0yHrHYb1uktIaKWoq6d54xTo5pFQbCfM/BTcuOIW/TFmBRvgycPPhFf+z9SgDy4AAAAj5HuiJN7K4CEXX5ZXFuYgTIxKtKtvEvxK4QVHBJS4WhqgUD0YbBre8LcgtBxHvsYG5h1ea746lfXQlyuqRELyF4ft2wEJvhdubVYsjd19lWP4G1ieBxHTzFMpAwUf+35uwDFsnUDuLS1+hsFDEHMlBTGSY28QfHWEheJUO6jwZ2Mlr3swmgOLjH3UW0UE7rsaMARgilYZntURi+GyKuSF3Aks3m05/hMcqkeD1GVFmoPSGDjkPU7kSc+SFhVSWqUELxukGpFaVx7IJCGTQUUpZBYAKfAisuZbEQn4Kp530zrD1ePz/PR6SVDEayiICcdBepPaKADHFbMaygY5PNgIPKdVjVz+jKXOLOBwS0W6CFwGMBcUCe1dRUQMvxNaUGeyMyr9vBJiVHdhqtpxFJ/NUiVo0wiAtRIUDepABw0DyMqi0cBfNOFZD6mNizEUCUme+AkV+6tOTuVFv7Jl52CyA/6BoYuo4JIWYCyNo8gUhS3MlPfD7kQHFw+5Cjl7Dinlv6A1SS7F8kyS0LrldA5zmFk0QNl5OtfOnos5UC7Ob3IM7oH5cQT4Qhq+MQQITy2LOG4RtZ1hdzKjT+HhT/TkR/wYxK7bOK0QUiTHO8/946w21FuPo4DqP9KO8Jwsedvjnzmne4vN13AUQmUz8Qrx4DL5qF5dD5jOmIHiJxHyhfbTmtSjerLB7ZMAuGA66g1gZUCu1mfalQCtc3BRjKPJA0buX56729CQRVrRwrNHC0XycD+crRrQyWORW+ChcHpMqsiDvSlVP07zb11r7lW0JbPTMXsaL6OQlBKzJBl6er3U4LwkjVnYC3h4HyuS3lshtzlUH5a3KinADnoKl6Oc5cLlf1aOIZWVrnfGos1FQtaoOmENeRHFUUh+Nj4yTUnVlQaOfv8K54JB+nj7rN9E6yfqX36k4VQWMlU/4cG5HuH3PEPhnqatD2xb6DBjj5Xo6ktHAWQnoyAxsYLoNwPlJo9qRUqzHZmNLytA4YFENS7W4ZAq6Ysxg3UKMSRaoCzX8ZsYWe1zjx8g0fv4a3FLlPqoq6rQa0hEVbnSRnzMMWWTPDVrHZSWcQmZpB37hteS8ta6CNDm55nwq/EuX2V4/0KfNlyUW1UoW42rj4VE+J/g2R1JO02TqGp21qxddyL5bIWtJtAt38Ftn5hKZZYgc8slOrbag7wT9dSfSK6mUE5+MnhrAo4qjo8OPCE1DlZfStOK6sZCmeeAgAqGCX0lhBHrBOJO2s8aYBIg2/4ERf0wmTCaVx7C9q/o/isRtthzv+xmYhYYCcUcTpkIbkOu9lnujyR+ijwld1cuTzXW1Qks9oyxiSXiXvslLFfa22KqhhzDM/sgSwbRzwn3vqlr20Se5SmPNhdc1jGZbL1r8JCtwm3PmD58E3sVU3opeRmfjfBE51Xpn+nvWCPy1tuTvk2wpAEdtQ+1GHkoJnA0EoBYwG8jFxaWJAqtcAbSE42cfFT/SxbxJY8YDpUq+kZF22228CYkgpUet/KDGto1bfIGkV3EYTqY5pLuBDVUHkQxYr9z5G8Xrn/SEdFKEWcBAGCO0WkACBabgdKAqW85iLTiEVHr0SK1O2EfXCzlaSDHSAjtevI5l2rdF95MVyVzD51P2v+baY0IXoPZnOq9HNy7/iWavD14VCmDYMm3PHw/ZzUrgH3+qWwO47sgJK9uivMDjix0wqlyaPpACB+awBezw4XPAfRYyFqLuYx08c1RVWWcOu1InhBJkGDUwt2zpnD5qcFQ+tn88DrjHKOuURdEO5/qSbo8vDPHa71Fe0TtDT0zw/d2BG/nfjyq4dGB161/FRhcoKpzcGHald7MYcp7wj+ZpYi1Sab5bC4RH8E6ATqrBbIfOB2Bm8jbd8vpJzO8yHPrM101jZ5C8NkIJpI4chiFnM981B5pHcvYL1H+eL9txUOoAsh5Jh5WFmDkBfjN5ynpzOuRu/wUZgvvIc5FCq99RLJZUcFTgowEkhvw/ntN94X6SRQCLgEiikDbipHYGMTuJcG46viWOXx1+ClHPu/UZDVwx3WRExZOnqmgYi1BxA6vz+KtywraGqxo3Zh2T9PyLIwNERauRKWd8zIaYs7+a+VNfCM5eNeCHW4mItqqYue2A4nv419SqT4C3gwlm3nxSTVkvVVDFWAS/GK0QVmayF48Gn5yVWfjH8Z0B44Gg4kciIZjtg253BPW9a7/hoApm/C/ScKBprSpMKi53JfYQsfzuXMtvgxn6rJhpclqpEy8CwL7Jl36pY56iMWKGXIc2boI1jDgdecrKgrfdDRmProESDMmpd6l2uK3s78H3i+Z+mjJ9K6Zg00ljKtjZolEKmkGOrKFCp2NfReNnyvoan8+8/z4RJRh4WUpH/+2vaMJOv7MTSot1tAbJb7bag7YNEhqK9zJcAGr6fn6JCVO3AmUyRGpLSjaXj8YsU9DAN6avSLEOpdQQatZFaFmvu2hXifZkq+uS4mwua70634rvbiQSZZ4yzUgIANMo38BQIZYXocmhHIt4NbOnCbLQD/YIKNwivjrDxXirnR1pjDhM6pS4Sxl5gxo9m2vKEZtr8zMV+s87qkcELL5l3IeKMk1QvGV+68aMhlNCR4Lay4SKrgSkjaF6k6bpbnyoiA4wiIYDSygQ09e2Tsrq8uMYb2Gx+zMLaorBGWnJZ/oHXOVbNhUCAWNosg+CVMqrbTlTKlY575q5RSWQwSiObJ+eOSuRnk9M4xxTq0G16mjFnTKdSDBKMi6/3vJxnnvxLMWVYFSHaLY3IDt50G9h7e7dPmijRfw+tXu5vUf6+yyZ34/TOf4dSc0w3SEAb5hZr3lVCnT/SDzxUvY+Y0sns/Axwhh6ME0IV7r1EYS/fXHbW6yA6eGKmntGSLnlt6Exe4df9WWSZ71DaDE/KSClu/C2X7itMnfOz3FhseoLCvcLiQ9TEXTwGi1XDBrdscr62sGUeAMN0/BKzExyA2STJttL8CG3FGUFzTlodwTV7Q1xGx6vMvZqBOS6vvBc0h0e4HgDWTRJHAPzur3ClYFqcWh3SCPsYRi6D77q+EGLpcl5mL3R6/IqIXA1xwX1demJUl2rYkPow0DYx+Xg8PJiIz1eVclhVwgkXeecDd9wJytPRiiAJaprZv3IAxolLUr7DU2bk5B8soqc6OxKq4LfUQaNrXlUKDZ9vI3dt+px3e1+vYVr2P7SOxs8wvMUptmS7S2hcBBl9VKsYZ0YHLTGuvPl3ii5YtksTf5hA/Rvmcz54j7iL6yRvEQe0jVQ/CtYxoKV4EfoIDOao4/H/+iM3xPUzwTUXsLQET50z9CUTuqSKyXr9UtmtVl6iNbxyGTBTgtK5yjQ/Ae9bfVyj4FipiPChPSnOtPCWuWZP777F/SyG20jYMY5/XlGnXRGt38Xzyt6JG6+6AtqptyW9SBxlWupm0LLDrvSQ5OAE7i6E3e2AmSfdkXMp8BtBWpEuPqxcch1WfDpQk2dbdVqeCtRskX8+NfdAsG3j/drMpby8NlRlPorqUs9TQGXflX9/XQVuIcHp2mei8KzsWwNAtmYHEHMzVxq4V2yxGI9mrmMCmw1Z+RySDSn108y5ecxuS/YAPLQOAdJXiWq2gmLOGQ8VoOJRVOerx8L+ACeKlRMvItMtgeO1KL/XCp3r+JRE2GmJHns0OEa4F5OGeDcIumfPOs0TOZw4xTFhDrdPYs8zQfQwfONMDkG3o05lKZxGMiRRc1a2NjwCSXHj880UF7WrlSw10OoALbTbgMEuZkQy0cbu1JVew2xQHkVcpITK1Q/+DHlFhT6Ix3TlcRPVB0R1tpRdR8PnslYIJpVq9cQnqF0p94Uyw4Q/7+EsHrG1MUbZO8BWoMxWGyueqOJgSkJbDcf6RysFQ7DWRuli2YLKEhXI8NOqZ8CuqQ0ugYI7ps6+sZoVA7NCIxFSi+kzK+MBI+AMQ/UDycHDDp6AUT4QS2L699cJRmyd1MrbX/WGWEZWnAPeil53OuReAzGRJmR9/V2Lg7kRoXJADVqKbgtFcnXqvN4crvLOGIDVqt5b/ArU+TERo9Ky8ABt6zKLDY2QLRd9o1OcJm8MFS9AqRt9CSanCCkkXdeQA4xCX6zH8QnZOOjgu8AyILO1VvmPQULgiSFECcauTNYu88RwTP/THhFRKIaObzOh7s8MGz180+hBPdtYJvOnbvDcUFWtZ82GuxJqlB/ic2K7Su83CrAVQGsTU8eh513b4asgTtraE2CVdNXoIOcnJU9U/t7PC9M81YxVk8jvebhVINnOcLH8vG5nGMSnGYSL2rnxTIdz8H9GdFmH8hwMSgRd5+zg+EQD+bZ5VgjSnVCeAKC7mdP8pPw3nr8xsQ8okMh3jtiqjCr96YMa0274qJhE117COzgDnkH2C1s8J2aoXyvWogIzRg+eyAdlNciGZDYQxJkj2aU4IGFYB2ED+CwOH3SdpFfCRUU51CuQx+iTMd5biwQaXDG3crrPZFkwiNWU3XHIzT5ArCKa4/I5elvCsTs1oSlzOdU3FQ65eKeBeg6Gbs8b6J3OQhEBghelC3pbU8Jjj6ULNG8H0YVuEzBLUVB0S91WC+qqraIvRky9zCDhak7DkczUStTOQwYPKadsEi7mu2OzZbCpJz+RtTCKpeal4SBFyX0Rs7O18lYNj88rY/BvMFobzA2MnHAhlQX3NwnXQfPSu1ddaAxmZI5L889xMCOBXGd8MFSsuJ8Z5mH+HHA8NXQj7rJ1jGJotKzJkSLvaRk7torzQ7/923rj7DxvWmA2ChXNzvNqPiS9qHhEZ3TfOd/e32Ts3N8pTbcEBwbLlUAGT+SSmNMBPlUd8JIrAdEb/UDzkkLqAzugg14luapD4Q2sBtp6UueRoRt464pchUBPZRq4Q+aEuqk5UzT/IRLfOuskPbEHL+fAhm3Sx1OFd+Zzqz/MosqS7mlS0MEtVpx/b5ajItzkvL/5uhidMTXrXMQ0xGJVW+O+TYVVCus2uEjv87xF6dfDvlLX1M2QLq5+7O101UZ6kqnAsYdTeEy0Iw8YaFeuCs102zUvJa3vnrFAriB78xdyo2HrS4BGENDvpsELEa98GWz3DHtTQh8eC22Ubpg+6qIiVOpR/MMRAilb/iFIeK/puTLFBIhoPYf5+NsBUeOwYTTYG4JYBTMEMdorLSOFR63W5Dxfz8hDyXdHy2f8P2k/AHjwW5U38hxRVzeWtBOQdHYJX+v8GHIguVEv/Q8LqW/g6qq5UXcmi5ZSoeGtu8Dqw6KJ6ngDGtzz136JyurIFdP5CmlzgqL9ETR5S58OT0VMNEli5BqjPQsvIgZzJpe/TBI0PlrRuH5Tj5fYZMVsl2YAFri5oiJH6HXpuY+e4DGP9MBE5SW+xoSIJZPxRSOoCFFiiIP+uFhfErnItOJCsV4ThDwwpjgdeCuWVcxDr4H67Fi2gyK+uuMZFdLkEM5jjvzHQrmUNLb+Y5qO8k6qqEPlJkAvLLT//Oay+w2IvmvqJVk6Yk1yA+FYSe/38spx3k4L6CIYEzgQpi/WqolngIVTuk0Y1FttHTqlKf7KK892q/lx2ffwVb5SQftmg5EoXZC1wvUvDeWfrhTYlWuQcd+GoyDUiJLqaHjSqSa/Mpm1UnHhrKSvsE92YZIOCw1ou5XEBELYKFnu4W8oLoST2LqQd3wbon7veo6dZj/GfimSoYoNLlIrzBseXdTVAoTfu+XIkil6e95Jv53AAkX/jpyYnQ5XhCanCCsXDNFKaNJIlqJttJERni1g0K6UZPrYd0cTEuk4NZ81LgRvCuddmdT+kfRhuqUiUD2dspUJhXKIU+g4dowV2Xkyt3E4A4rcqppRKW0LYbK4+vkQU/OVQ4bp4A/1wwbZCj7HDMmAgNKGq+tezMsBzs/jdXrquPeB8m5EUBA9zx5xXQec6rWT8SpsgkJoYA7XBiVLJIEjDD76Zbx60gRLQJZ4+1ubyxuzGSEhz8xNAoBrS80aj3hlVlf95F0gDVLhzMdyU3jDbLgot1ZeEwCCGRwPBrGFJjjAb2FfXb6dWki2GPcbsmpxgbz5DMd+5qs0PN316Ny9FzTUsDMmqiyvkmlB0guPp3LUxt0naG4Q49T8E12m3Ehxg1R5E8N966bFAsOKSqz2eNZfVPrpM0R/gwqDxpFy0vC4cZtTlLZPlRgBTggAVzLxczLTr9V/6LMHgdSlPUgruSrxcLsCdVGSLDtjrVngQoQYgwsiUg3fdgO+gjtmXgsFMigj4l8ZRRbUjQvhWSZu7ku9uZJPQu3YY+PScPEZFIl99hOoMJAjvYR3QKzvfm0h5TJujiMM36cMrqdUtypIa2EihGWs7LAZ57bOTdfil5VIyfgwJfF4zGZ9WdQQpFbiW+LxJdPcl7UJTpe+svyOA9NFuwhjiUFGy9y8ipzINrmmiEW/dECq9AE/yFskFGcIPlP3mF/Cr0fLvNZmfsWcW4/nYJdPjYZ93ZtH05kXmdRKdGAL4tfKMiPoBN9ghHMFy+5PQ9BRVbzvavoXPmeoqiy+waMMKRNM0VuNaSR7VSITvR9sw4xs+E7KUmbOXr16bK6sdy5r6WOQNuwpYJCRnGgRpMvZ0AuHAGo1a6JUdqIuhe+mzVcSPs8nnw6QP4A7f3UkrgGNvN5mD9WUGGa6qHbJCCM6tEBSq/sOkQFscxGkddrHIspYq/kkYbPO4FvTQwNLsj9+6JX13XwNk/G8JIYVOsu1wuZLOxuUv8K6jvGCBdPjBUa49Oany06CvYpvi+yXIrGfD91uacOjPtWRQF8ku83eyoeGImCb/f76to4z2FBKHkTZ0HeYMbNkOPMKx6PMPx2A1ygjC4MjnfCDSDAplFV3dbWi4fFdtloNY9l4/iSInqT/sHxeIu66mTFkIJcorVHgVj0HCA7RKlHBneSGiiUXia9jPAPwPnWpFokkX1mvNeUBQcjk5AyWPb+WaN2LN8U+mFo2INI4NjDLuJFtLeVgesebrfApV2bjmqBxFvF7eEg17Cz+TiXWr7LALccfqNjfWE6E194SR/G+ye+wmZtJrlnu7PdyAln0o9ULstCOmtlkXFltSGmzrNto4Z9US5Aisl9K3jBPiEz3wcj1LAYtinrmfUCeZDjFhFqaDla3fVqPA4Kibh0LhZpRkiuhTxSE58ijWidRjxZAiBxvchzCTUXEJmD4eNC9kUvR3mprGns63zmfNsARR5Psa2Ljc7nH+qkirWWmJhX2IkPc8iB8kD54Gcxo1uHDkgBJxj/zau1xDe+jgGC2pCPX0XvfKEqz0lNi/NLH9dwudWat8ayC1xo4iDSo/Lda7Qj73KHiYaasUz83JoyXau+wkctHMEm3PgLo2a7OctVYNrESNLiwPSw8DfRdiVCH7NyHKY2mxtw70lqW5vXw9c0HAg1xpP8WwumnTuH/4t3AbeF6Te/cDFW1gxWvvSCsvrLJRc9KkeZKkK64tZ5KXZgKAgSv7AF3BU/O1nkPpVGqcGZI/E5RxH0H6RKYXd3R9XuFVnDmUlJUesgvDJtuuOTUHIztgbrs9wj9qbz3DBUM89FNTJeAqKW6GK5w5JFmPYTBNfqJ3W5cU8msbLtqiDofNOS3hpkEZNYjGHNd9ihpO2tDu0t412+tvWyWQfnFrHDcfxR9GF+wa1pWwPmdRA7JJ4nEI3l2FBdRWnjswptdApoB7jWA6xgGvzvpRzzOoO1Mo7fKuWn3O7t633zlbL5N33YDlSepBhv/tkQ+ljab2Ry3uweXb7Ls8SL5/4wrlNwPfqZ2voliIphN6/anu+NFR+5tWQ1PHYTNje73+OxIfXlwvJBiPzauY0ph5ayWOq3YvPy7IHXQUePw0TXafskrsLIvJO969babDUjTXawTAh3DxmuKaiQYayc8ctqXYF4rciMeAkBJffTn6fD8eAGMSCgRY0DAua/WRdn1WwBVzl+kvLYmnaUIW/v16cn0q3cSTN7llW5aEGICFPA0UVCr5N3wWJ0Jf3gqZCFhYv2Sm/gu3oevbhCKzHv0gOSHVCoM8jrXBPHwUlGTnlWeJ913wnHf64bFxiMG3J0zuYaH5F65X/+1EhOuI6tAA9vFj5gPjVDf78PVM4/7Ig5ALMQ5CCwoVg4da1wXngR7GWzOxOdL4Q6r+mTIlss5K0NpCaBziP+m51PWv6VpjMO9CMttjUTMVHBv/QCQuhp0tfeanpqC7ucwqSVQRKc35Zm4LTWPRO4AUDyAhpaI3AqZCkMCYVO6GgitfvOHe/RaDQAfPUVoLChkrZELH65uy0Fiz/A42dc2tUO/J9DMN5eyv6tARHUXII11ImlHKoZDZSBpS1Tuz/8sgm8woRTs4njtSZ2bBpwfWhkG3ZsBmkrxRUmaAj8yIh50s62WRT6TaC/HddwuSMMYlw3cc94/9uHJBrN0X/O6Vl3AUDS+qCyqPUIvcaVRW0UPwckeTd9FcelFYgW0vqX8hZXKR5OsqzYrVF1MyvZWakI0Syx+yCEunERvVZBVQN7GaHOw1tvagDkW3lk2EcFZIp9VoG0KFrCYWJSZCJBhr/jDRyrF8y+eSopmFSOP5IXTWtTzmkZHXA8KHsNTJlHPs2ayRjEVI+jJgcUeUU73BYVWhuADiJ2R9CjMgabx4zMB8XJpI5H8VCev+93XFzTeH0tgAAJ7QdA59SQAR9AKRgBLCFNK1+2koi8iVepv3KdGopIzM012Juu+GIabRIcOXWaMu5grhTAvtovYHtBKFH36rYteqJkxBFI+WMc9VegzCtxqYVq3ERSVSENFeqMm5GCUCJcev5q/JYx7iYjhjNtnsCJbvaa85CYSEz8F+5fgjrQ1lnQs+T+gBgs3mlNutPu85BhaywSc634GWTJkWFTkXSfqdShhkSzQYNIIP7kM65H4IXLIXvRJ2i8bWv98KltbBXRpwPND4Ravb8cRZybbANowPmHzXTc9NXaFlt+zg8/3LT2C81a7E1HXozckJrIVuEvZvNSG4Ao/eNGPrSqUF7H1I7l7e9jdISiywdO7YF55gPQkm4HK5A7xNXhqSElfmT+fFG5ov1as48ivZrilgcqTtlEjmL5vFTdQjsK9KSaGOGhMKdK2bBUTdsyoWZl38KBR2ANjwXDeJr1UMOiWSiI+EDNyWpha4pmTPJlNgPzqv8SAhMo5xrg8kuQ6Aecjp3U/jpCdjbBHotJEwZoWDo4nn4rnQI/vq3zN2SEW7w4qDd9vdED646K1ol6i8dxUJ7h50dFEoaq7V6rnQDUWmKQGr911PNsTXawDdcz27KDBdpgKQx/wlhduim8S532pb+eY7wkk6s7rmpP2N1MwQycBEHgeXul3HKxjqlQytRzMIv4xDrJn8W2B5F2fAlya+0MYJbNmook2u7V0i972tbWTig+7n3NgAL0TKsNdvL+uM2A9zZEBoC1R22LJ9cwne1jZet/qGmnOx5+F6i4ASSorNWKpOJSaPcY+NiBBb8wPLYHtoBRxumgunACxxOLIxuiZPVfK6x7Rg4RxDtuuzAesfvoC7cHG1ridTncpCWurbpIBOr+EtlpJs5Mr/Sc0b8IgKcQGtuD/8ssxNokRAk1K4n7AMADSGI6KBtb9yIb9INPmHZ9Y+hFZUzH/zqbpZ/a8ORCoDvLCgkbtY8mngb74kOj+b22eXhlzh8hEpItYF+I73hb+F3e9An4f1wucP0hyouqmEfDloqYaUatITQhtbs9z5E747vZdwzQ8ukXf77V/17DaDc3qlcjjxCcZQVIfwENw077R0u59X16F41Hh6AXNBD59XQ3HQuPq3AfupsNQeHAEkcF7wbfpjhB1fNVCDC0UzbuPcBDfc4ciavbdOtk89Mo4mWMS1JjR5/k956Mm1iBxT0jjdr1bCJ7BK+c6In9/pJ0o4N2qlJrsNWnl+btPJ5rM510D8vf5Mr8zPyQKfd0Rs3N0SL9RyoNAJsqJTWrh2lbh9aByrhIOMcbYn++SQfPVBw786Pit5z6EwOnN923xhqTG51sFUoNfrDk00fF+WWSkHC+VFmgHz7MBR44/+DrkR6cg+Diwm9ZrwTl8IkMyr80HpM1ViVdkdNZwRd0FgqOTGMySoKwjRU48YlFBNBGqxUrkKpaUzaLrP/TcRKETRD+vqX+Fxk2EMVa6AUA//3joL2ZxrBhJfjE+x3J4g5Vji/4bL7GDECFw72Tukb0xL/MDuE2dhpjvo7fjMeTpfsPcy3FmqN1QPiCFjx0zozgdMFIfNv4u3WduwxNewyVbVxTFTuLmIbUhaAS42GFekJ09YNvJRnO48nFLM0A8XqPTVVpvWqp3LVRdAeF2j244N2eCuzXWnThcACR3DMcs4sxj+LAdyER1+gHAOV85CrZuqIBqgvGU34p47yoyKkjspVkSK55LOPcXBZM7nFTkWfPFQTOUf3IVIELN9I7D0KR5OPar6KoYW9Hbn0oMxWFm1KeAVaCr/jF3jlOdjkr/cnDYlSDv9QZmLUFXfo3Tqgo3MFePHUunZV5tFTl12gOzy/F6TLLyx7NkuuLAm9X7Uj+YAc3gt7Mb7JUDNxFH0g95Rhb5BdvUbbGLvnH+jaEFA1bw/km9zu3/WiYmWF2B/aqRWwkY59CMz+ekuuywPFOU7d06RDstbq01a6T8CihVZ//wt7lkdxZmzpTL1OmoqwBQ/AVasbOvtSD2aA0GqcvIpslxlDeqxXxw/zntEZDpm4Wr9fjv2yRqyxIjCyydJ8wUj+jbN3b7vRYn4sFQSY7EzkI7s7gHaWO50J8dudl+0q0ypr392mKfb31kdwOs/FGZaW39qWbdCQ4A2hLWrdBZ1Y97u/hp8pwsoZe6zs+exml15UpTcQ9HjZvEGjYWHrs0++h8bejA2qzsNga4Wm5fzF5jYzxlA3WxyY2BTLz+oeh4ClSvI6PZpmLNPtL+eMFVQ9vgEAL2YMRi2QuZFgKybsA3QsWa6vpjVZaExXL1ojZEL5kWrEfo3Su/cFNFvCWx6yBLD0S6O/L/B/olD7NHp1SVZh67Lov1UUGmNeFmpgqyjAj9EYUI9nvhEWXneXu0k9H+hEonKMRsIN+i7RDwE1QDhr/4Wl+O03SkVC2wxGBJpCIuaDho+9MLQjOcsaWZUqESnpPfi1X6ZJaiVIAdUu/2vpEwZmcV5usN0g3rBh04zWma7qYXFaHriPWZSZGgXe7YHvvvOB7n7soUFNQ+NXtkzp/8K2PX0vLrjCxq4BX7KixEIfW7YLeFJFutZv3/MvvwOzPEYj0bamZK6Hqj93IcnHc0aQsYv78J0/fPM88eHQbCVFgilGxPp0FG/B+vHjuIOl9raIwUDDK6MLlFtLi7pjQWVWScz4SvMMkc7iLvi2kfa2Wm48v0O7LlurD5qO19VWc0IEcWPxeSYBAuq5/9QFq2Dt9HcvnhYqcQQFP8oLpbN7AAScpBgckECZLFB0Qz7dZiO8TBU55lle8CFP8Fd0GHXFG9UFUtUFrwpa1APwSpcMqcYZZtNIfMdrbHffPIEco7ZwFNkM0tcmcp9gCNlwVVzFL+XXF/MYj84xxwMTU2gntkL5xKeKN7x/kOLwt6oW04L6B4HFr+dWnO6nlU2WvTztChEWVidckxNOAjmQ6V0SlZMOvQHrQCpDh7Bu5vHvEHJADOMpZBNd5j3IZquEy0dp3rxQ7rG7ZKoNneWWavwiArTv1AJpL4019MVCMlEy3QtkR53nXhfLKvATFiDV3pwLBsUR/pBevMAwPh043R9nLxd77VwBgODG5Y8h6/g7MLbcjJ1gBFTHnunqh9lderuOZdMEfdy3Gbrye8nUZSnOSoSc97rapVWFRJBJaeNzPbSe/d52kYT5T1N5LAqs6cVmMIH5VIzAS0xIr31TDdySzw8rRbjQ+bFnj7eJji5vCD9NkxN3aQfH3gYAAI1NFKiiZTh7weECqYKxBuoEwo2CSIhDc3kj/cCg1LCjDd1oVMbRK904er+FEBI83nM7bRY8lNVSbUp/2GOQAAK/ajyyW5j+Jt0JYvvxLd7mk+a/h5CW7Yqs1RwdiSxANPvuM4ITwJoxFCHTxOD1DTXpCnlFnMXy7mmZsFFzbZPvSplGlaCWf46mrO1UAxM9eRX3wglmX+u+GS9Aus/iPxufga/Mzfm1T/DfInBgc6uvt7CfbOCGRcKCHp+SpGk0CTODS2Q24NF711HWZFtTgVHh8oTKPjvRJ9xTKdBG4hYT5NmCcvaHqXWLtMuDMCSaaHk7RIOGFpoQF5djFN9F6uHtghcCiePJD5tu3PnUrJ1f5RcWx19/ufhB3acJfj5NP3kHV5BonJBFu1EMhV8oL4Ur/iLz0L7q4yd2UrHlGZuRfZobFI6PkecnJbY2wqSK/8lJ5QbNiRN6OeIfA3H4JOfrVc+mtp+h94dpMOCrvikvoMUp+qDtyfljo1MVzYjEkhNaPlUUy5NZjoEUB/2RzBs8OSwKFcHYr31M6OkSj+Z+t0GRZnjQwt74SXv64moofLklJEsjv4oxg5uu71EaMH1wCCGq0mopKUbBfTWKB0SaGB+Zw5CO3hv6ZereL2avrffowy4e/1sw8WvJuq1gpRHflFcjiXSoR8Pw4wBACcXItAMGFdCWTTakyDhDLdc7cE4+OoiEnMZaP2BhcktbHfKUJUTyEgMMZ9lDJsw8HKiuy4Tn5AetslCJmh31jmdQc6fszOgUSnking7pQBRJaHk/xIO5/TYkw8dKZAdU3wyKw81sVMuugBXMJe5jkQ6EbIhJGdvF9M48hHTMT9yGbhwmxkCI0YMWMip0vc4mnDe9ePnJoQ5QT26hkmMRoE7/71c2xCoW4nGwpGdrFcx7GUwDkq1cs+9OEgf+07jw7jDhePA00QEoWksUoQryI5IINLiFT4Jfscm7AB0y3T3AyeNFfyJsjih/66wcXmKs2hNdhmD2NF8QPdUvjXiFjWDzcYE29Bm8ETt9c2y2ff1lyf6uEOrtsv4DkwdkKnCBENxGhPRnQIWP3HvkvRjdXfZN00MkZ4PG7q2/qQ6bJmx4QqQAbecfcDpp9dLkEBZpSyeh6AKe9Ix3anEf5NcVBRbcZRr2d0jdXaFeelOocX5yqmeH6L1opndXEaGW/wKbQwIM1qCKfRhxUsdmcIEN9VdPK50WyYqli78trIQTLsMLEnBmRofM8mV+DxiuUxUKYWYQJp7ZPxjJEN5kyjF/6bE3DReBGV4DVhWGs1bytl+pE82bgey8th8MyfKyi8XmnE8Z0HL7tt8ClBN9YSNZIQ5rOmx+o0Eulhlca5LksxapTCg3XJvfCQiKF00eGtJtT+ePEVBRmUu1Frxv2BIePvOF6AufYlzX4eCEqUtoXhnOIksah39wYU5kf4LBp3e9GjG4n7ITUpUBDGAejEQ6xAulx1TnKAK/ftVlQNgFaUPsm0JQMDSG9u/BWwaJHkNVm4wVZxwx1xHq41AgLqrk9eLVsWhCvIhL6bP+Zzxio6kbNO+MU8Sc2QDvfGUIpoHIXtDHc1LtFE1wnvYNpGKiKMiBYINKV7x5HNHsBDVhcAyPYYEYwnpDgWp0LsNRhqSGAJaV/5A7GBiXb66jobEtFeoNGfyb7WbgD3bQAz8R/4vh0gc9ZTfdWQIvUGJpPz/mUJOmW+WU/aJhOuW93HjwFK1x2V4tp4yhbgs7FTzDUKtdtA6dYP7jeBdyVrvrYK0TgozjJxp3zk56lNkrBSgKiXdj9yYxMGhqVh4KCQGoNnKz73a/6Bt0qpyZl9lY+AuVEdqq8grWVEkj1a6iLOgEnYhd+8o1zCJl9xsy9sKFLsITngJLUkpciQcEaD+jfdUa8fTPexNAdSpo/vEa6kzN+mu01KbXxX5jtM9Js7YBMNo57Hyk3wRk05Qmj9dz/PpuGS6qw95XHqt5nzBbvHiKNmzboAgIhkqYBZYAgYBAiSbQvQDXB26JCuubeDQLBQ4kAOhYdezpznlDRbDl14NLoWUMcPZUyAAaCmPtXgmFa0VGWQrrGwkRA8hJOdiQKBIPQ2ylFvYfDlDPnn+ZCnZ4f/6oVbGhnKw+yG2vb8NSnue/F6fgNxPT0VkI57dFx0U4ZckB8FMHIo9nqLDsD7sK3V0bGhsA/hHRMB/8h1w24L5+oiJLrGpPrRIQP4LVLTXZwYMc3FaDW5x8TtMbEaV37STrHtO7zW2HqiWAl6o7iTH2tZmgUZa/P3CUX6YkUcfIH0QxFz8Q5qTuRGNJZ+Ry4eSt5RmoJf2ULm+tAOPaBtQonrwcIll04efYapqgrtuRIfLZesCHnx2pAiOM35/dsfAGGgtF3pOPKhffFWxO+AAhtojyQ4LTB0MQ+LhX9aaKCUQovCakbi7ihJxJHpDqOKthv1w5NdLMxkqMQyiEQXqtcpL675uGOkm9Aea5mS05ayC68ijRgSe8wV6RdkHtHNPtFtzDX07Xm3OVLGi7Yn7aPD7ea/ao4VQJQHLmSUWOxJmYFaGkKT+Lu8MATWM6BVM990o8dqePW55ydrgZ/z8MFwAO5X035SQp9ycsYxdT2GCLpdJw2xSBu+3OSft+1Kgi/glJo+XT7koaV2WzQxQr0D6TH+D0Td6kAbC1XZSUPSJtcL/JrXBjhdmxBisF0Yb2Ia4vDKGnL4q30U/HRlpYYQ1uN/bNNTB0Aa/GJcFj8ZzG47gTCmAAat8mS7JBNBzqb1KWdXNy7UjR4c2T/u5F6dAE6cybvMAIySJkdI6qh/VijaZxNBxRB3GgGgg3VIihnQRsHc3XhdKysgxVmDAVcofRkOVGPu00bLyqvE5TolFrYtZR2fcSsR8OUS3R/pGP78Ri8fAUy/+hps5NQ7RolCOgopFoQglaGqF9jqOMm5LrCrQwIOkWJHwoLxAjlRp5o4PAPSwjYtAtkTZb69zJoQl/EWKgcaREIxe3uMiRt1H2HAtAD4Uuv8KOhTeQLyDCY1diM6VJxL+dBAjyuHGwNOeSlquxzssPe5nXbyUXaHAnlIP6thafeuS29hJ0A7z/j4SW0Oshecokk9OtI2i5fb2JXBEQkjZgEjles69Sd5p21UN9Gc4FHnu2trmZtqUvmjr3tDPIx2j0k15cLjRC6FMKq5lCAGdDL+8VrCnO+MDKzK9haNM1Zu5vTnsE2Q6HXpNRlsieZTq4OJtVO031r7dLlAdGhG4/33iFZ7cCbL0eq8LiaoOoMbk7gO9Y132RW6CgBAkZgsiSkm0VF/tYcKHjz3IEL3StD+T4Xqgx/I+yYoORerVNh4lh5BrEHprY29kRBXHcqt6+FalMWaLs/1YEmU3c8lBz1GgyBG4l+uBDhs/W0vUPdCj4+5/VV6Wz1oUi5Cd+1IXVRhXmJ71WU/rpQMD1Y0n5Yr2L7zXHP0ElWeFmfx2+9CKRL1/3EoqXJ5F5avrWZ31rshkXEz2jTzzaGK41TV93Zallh9PcYEQbFMJbCEFV9hIo8i9yJYvMPzdCFK1DIY54AXudEf0VCrVwBHGsqVEA4TemNv3LNZfv0/tQBx3bZVHr48fdkEiM3E8EfD5/Fa61bVEhPA5DNTi0LtnfAKHw7MWy+riNYKjXSSy+gr4LKoXFoTFOhABI3ocdVd6FFHxg0kdg2nOd5nGHz5YuGjjHyYCnHqq8vsPZxGp4wATwVPI5XPSEGJTc3S8sQidsrym2Se/yQbD5yZrcfX01iW8YPtVBcv5ThC+tK+nWHia3S+4Q50ehPffT5QxyStfHhi/0GWgmkuzvX1bEggG9YpAoqQUXavRUVXzunMux5a4EgHzPAMkeUHLF81qAXawGY4v6WNL7ljv/UYXHQo/OyZOgyJV6MQT+6ro6OL/cjlhsKiIuaSPnB/K6O83zyfQntOoj+cZPFa/lqiAA/+LWmLymZ0EoritjhUOy9KraQJhs1SO9pTHIK61lTaeQtQSOgSEejspXef5oBwb65KLJGkP5SZe+VRy2CkjSN7SwlycOiE2mipMk9cr+7jA+J+UAy1rBK+Ix9uX0DXxlnJcGTqn8844hZ6HZgue5RazsGc7KuT5Pi0+5DOONjuVGhqldzMm0lg/9Ly3MdEBNHDX1xbRu3r/RVchBjcwWX7/Al5BahAsI+iOadmadOAT+p2y1fzhOWLnmTtQsMCyLxf/M940IMA6BRlrgGLkTKFjT1AxOVnYiwb1YXruqRE6OzlMxMA6JAzlSxh1AELYbo3AXm2Rr+yd4R3tYPwhGNR04R1n4xQzjoM6qDG70dbZUu71HuCh5ja5MV+6xa1OVqko8QltwMAR8+Em2cKYzfSUwNXnE1+Sg5qZNOdN4/BND8Z3onevraQ5rnfI69vCBQgB2qHXTImm8qfOXgh5Nxeuk5edH+73bSTlSJc+yH7TP2zlrHmp/UwSlI+SoKa++RMrHLmk27NC1S0WjPbXiZI+TFkUQYE051M9O0883I4IjMotMyt/IzIQ5GME0lKhwfrO2/2VVfKoC4ZhRCst2ARpP86ED/o9GYX6avL3wsC4Wlw2bOLqyl59zNQ+6zobAYqR4GwTJ15Fn+S2+kkbSxk89lVoETb9J5wgs4MfQnMlYoyUtWSyiSpPWYyiWwI5ZVhPH6KsshBbS/+j4uJih9XGMsVvPLP+JNVpTkEOZiLpAEnkGnPHJY+fGfiuu6vSh3ibJ7WMcRpvfbZvfQfiI+i8uwRxxuFIIS9RoHW0//iP+M290yTVMhDA57n/lRIAEqqcKRdvpBI5U2SYzpABt2uEmuDnTYhynb2OLiyx69QZinXieh+sw8TioVI/ckJrl7/Ifa+tNXKgtrYJ4y++8oK/d0X+EjIkGUwxS90ZpRUzdJEREIKdyMYodtUVT1Jg6VOPQ1/fjZYrB/upHnutx5aNdnmyhNrImUYTN/sByxPUCFj4fmT1PNUmjSI3OJ+OudsdQ0dxHqTf6cUTEMykAl1DvqlgPDN6xbq31Ud/FqLAYF+AYtGPjvVnVuf6kL1bdWDXdGlbgA33Hzq2canUsMV8Y+fHaUJZ5Z4X0sPJ10OwQkYJwYPa6wjuzLFowVW0LOfrH3xuWMGFVU/IH8bjF5sYEU+ObWWEtHPEnFQja7w55Lw5D4Ti/5y6q8PRTCCqTt2rADaA8tylvAp2EtBzFPLui29fq3b0KxlanAcLqhNutVVjieqXFNKr/2hQDlA1zW94kkK7tzexAISU+T0ox+KeikZSSnm60jqrni/Bxeb6QbGPJo9gzUiQq1sfqj6TMZeGwnY4CEMmNwaCXEpnvnnNZV34X4SsD8alzFu9r8WBdOpTiy37Sx+NToGxLdHkMbRn2NjZytWpz968XPm6SqY8SGRpxav3WcYMsTQllXMejnzyGrKlYxmno1+RhKp7TaBnRSeK/TWqhgiKifAYYDXsKY9I3DsXUrheP6uc6/wvtbOXaY0N3s5a4TTp7m0uBi4czRQ6n/4g1bJ0A8AESH45xqoZR7QxS7Vj5Qz+uxg88oqXqAK1k8SY8EsmwqI8DuJnT2u3r9D28A50wvy/7i0UMi3KIGQ/tUOhvtSVrMs9x/cY8tbyMgAD11/0tJDPatvrKr81PFFuwTr/qSPHQEn2ghmmhnN/zOczcCBBrEMuZR0D/AIoPTbyousfKBlVEYRHHxiuqxgNgsI/ThE8xB6l8Q08OUACFGr4rkj0LWZDiAhWW9Vchr6YetUl8waMWg903wufWnxyTt+UBED1Kz6HCCKeXzJzQxCFRFy7pOuuECA39ecvpUJZdXyL2xB0VgYi8qXBAW4KSEk9jb54SzNi4BmPz+Ji4WsreTcOaicF2zfhXGzkX4Ci7n+ERyMhOlKRnozhIZlQ9bPQuadepIO5IaDyuGI5kD6bDnmkX7vXUcWZ7KTg0NoRnMszIBTRoDuz8x/cWyOXXgnXdLVDit5VfZqS7b9YR4Fkvte+oVayVCGvJTwTKDtMmXK5kXFFIJ2I95UpTfdRVjlhMyEeI0lk1IHW7nBdfaqFpdZZbOiCvWsFLpNxI2o6CXHshPE4MxRpu/Y/Di/fGh09PgB6ahPoq0tj3Ib1YhXCMoO9iy2Bhr/IQtucwL+ukIQZ75iAWL1eC+ofXToox7kZYqIGLW10Td1OqZm+bK/tiuIsSlDl28y4NlnKNquWT0Ecr2fhZ3ATvfwDciq1X0FLVUTE9wrrOv1zDo/HKCJLLoZe4sTF9RKQsukvtiqcX7ZIRDSsliE1yx8BGihffZsQ4qjEukniIyQA9NVdpoiHulHoXBShUJao7Fxx9VCCRjchQhZNY7BqOqqHpEUgNgwYW94n5aEKGqVOcrDLOdTmb3eF7TLejCXSigzExyqCYTQVc0JpujH81EPfd/zF6eJSSGDp1T20V9qd5AyOYJNOk0Y1TiQnspPet9EzfBN6d2+hsNPLarja4SrB8f8DVXan/4QnyoKOShrffXgvb1PNJgiQr1Wh8slMv5m6Vu18GRnY8gl+1KNUx3FH1iC6SDL5AGuvbeJl11yITpcLa64G1eY3TuyjAFdLVYqwI9uMxqOC2W40g9ItQOZKZDtQPcT9zMn3yahCMew7i+/9FazGl0U73EejzU2aq5KynWyapRErETk81EYO2V2CYVlQLXUGis3NxpHOMrsUUllBmhZ71TgwQLjboWqKdCwbuGLOMZi/WCiYrmTCoI8ZFEUnYtHvU1/ibBj0K2TqpsKGdviLFFtHXOEcfXSpuYx9gADH1JYcT26cgMXjzvAlIHYD+6+kwoYE+V1oxS5OmqBeIDtnc1j2+g0KuxOYygikn3yzX5xgAAACD5GodO3ErOmHTtxKQAAM9ZJp/GXAjrbqI6BfCevXjcykusjpCY0D/gXmgnZE9blYMccgTexgy0WoNVod1tBBJGd913HO9gDMBMc0hvZzdrE4xLpiwv04V2D8FvsK4Jld6Y/93zmuHAD4GQOnKJPXzc4IR18hlCuIymdXDnqBYWg4xWdg39L9ejAWRckoHpK+XqodVNRBdx/Vca+CzvrrnJWFESWeCVtTppsh4KZ1bmo4KvwR/jnPyqvgZMJxUcx8h1FNa59GR7rdgCBWXWsvvrH417ZPI620puhsfVWa4YEPR8CyWhRHEZXMoEWNeT09MaR/H1pgZSvZwcdbEcFoAxvxv1ucYg3EhP1pLllBYnFNPZFXF2S61Aj0kDsxfuCdk2thMUChxLNMV0kKpu45LPK0OYhYmqKVARhyy+2FU/ersU2Vo/xwtQfGJ5X8+31aNBT1nL+vQpGnt2rmeyxPuugaBG1g36HCoQAA0ySaQu9MhikYeypgkz4fyWfvo1/NswAPA+fRF8E/fS66eqNXb7K95KRtRsN5Amt3QlmLWfPNknIMKZpfh/MSGe0nTVdagrlrTR8aXNFqPsBEfJ76OjuQqmLZGVdNAssm2Tt0F8LS0MWVN35+aDZwVh3CsFkZJsxM9jr8KbwQtM+vUsATzyoPjpLU8F+TxF79nlgAa99TO4r7rIHOZ0H4PxTvAatFIc6U23yDcX6B82gUAyowtnLQ15VH4kbh4DDCg9EutSNMbRK5j9plrIAl1g3V0a14bm3DQP3wOb2TggeDv6AZ4Y9P1V9QSurlRSxj24ldxbbaMTlXcMIuC6ph77XKFSNOfaEahRanGeD8Kg3YV+drYxM9nD5Rk0d4axXhwz+MIgrDmPpSPm9FGiuNCmZztU/eSyG1FCe+Wz3NZy8YxZboDlfXaPJOhnbTtMEMT3Q3uo6k5x0iMqMSzCnoTQXyCChmX3t0Gak8ewHW3/WYExcq1csRKmYeaCJDQ8s1Cvd3DuELnp1DnUij6pX3dsMflL/qHLze+lVEWJnCka0i+ptymhSDxWlJYrui49G0yvnRK6+jErMRH2WLXJvlR247ZBfLAegO2CHeuBzFIoXc7FfUnlQaBoaQoAqFbS8iBZbGpxI2ZtpVn6wE1bvIo+8hQb2nivBbFDNotmPa48f+nPD+532bEZwbF8RMTYtJbgiuNEEmdPBBHhoLAC6krsusxh+Uo99UvIAvi1vRrd/lItjCew0VjTjgODBex4wpf48obdJONu60T8ckXXEzAtG00EvsM8Fesjm9qQWoATsDQXgjdLntj3mDPc6FQ3xNrol0wo71A9mgjywVZToV7+XR80aRqGUbOcGvuy0DtcisFA8gAA3fFAZ1t6rXRiY/OiFt53B5vznx61yl3hlbgcmT4QU2sWxTRmDbPL9H3La4S48Fc8ns8uPfReEUQP7gvfmG4lciIAmFGXsf62XQ+iva9i5OVfhW0qEamJrW/aJJFALSxnCXTyc6to9VI4iz3akx7aIcSz+0TBRI6G4rhDm11bizvx/N+FOY764rLtaJsK3pgmnhgkgGKEisQ8lOz1ihKuFPHZF8d66CuxRtNMyhvQaHoKEQA63NFQbKvYOWC1ag5s8ezE8+9kCmeMrS2lbXT0SbfeZTs13IC/VGeaIiVs/WfnA38eF2eYgSMQUexOXrtPSmH8sifFf3OhTRJDFcr2qgft2g8j0NN0Rb3dMBYOsvfL9t4Mt7lv+lIPI+OU6d+GMPi6B/8snmyvDW16ldQa2R8fvC+df+I6FRd0l9mMl6SHCiUNf/jmnBJ7kMYodca6GbMMF6lNiBZ+qAdaWUl65xS6fAEZdCMxf3sDkucOfNm3hMcodxp3zHtfv9v+3dj5VnmMggtyV8MEJkBHgAragvwM4LQO9WCpV6qoykcR0jiRddCQOmvyMlGw6GjAxrjonwD06ESlAHPpS0+OTZuSUXK7+p8jnZicUyGonqdtI1UziVBxFYdVI3YdJdRnHr7jf3bX1nsWXmeHNaY1jaM8DJWaAiAaawPZKfRFe9t501phB6smiMKIocAImnrfa9zBVIoF3AXovfyQN44CUNkCymsyOQ8LxCWZ9efjhivOaDHTsx3ZYJmOtFtq3Nr5xqo0CpedkZLjvEZK55MBqe8fjWMrJyvkqahlh5QjUNNKt7JTcnIQAvi+8mpAZe8Gku9DQxLmzxAgryDroOXM6KFGODut37WhtOgCR6ntChub1TFRKu0KEc7xYgy+EFbqqEiRh01B7wlm0z/xH+ONjsB5r/16WhqS6bxeOKV9JXT18B95mooEpF/hGxL9jBZZrGWu0m+MtlRvgOysxIcoQODqmzcXJavq6OoulllMvUyffdAJ+t1VOrBb1DqHXBv/kkpLEz1ggE4OxAV9NFdSB80eMhWRKNKJ6hP/lYdHtdE8DUupNwPc1gsxVj/5ScvLg4mknFnWbuD/NwAl3tkebPv0h/day9L1o3Q8xMGakXt8+Hj/uRjOpweWDLIBC/kvRWim1YND6iA/w6npYrcCCAs88b80+OXLm1P1kPcxKGQNgTi/innLYKyPnXJ/pNBZOaBxoH+nHhcpXdSvjwFYyOvYYp8kKNeTUbZPVrVq7bw2x8dR66L+MfC10b+W1iIjmtnNaOeGl9Be1qC3Ctr37OfkwNQNa2ew118jDFEadpOCgoMnsi07QXeDV/EVb6nz5drrbRQYEvlMU2ODDB0ysE2Yjcq2nl7TOMFjfH+hiEuFYLv/op8pwJfLjBZqRXRreA6KNPi27QfF8FQ+Q18P6/YdRVGS2KqLKs1ftT8QFrNX7U/Ebvrrk4YRefI4PC49JiXJFR4IZPwsfK/1/6tlvSiOEaiLphg2MIp4MkJUHPNzobgi0cxrFAqq4iEuypYcPVtLNPfO5s1I4CuZrcJ8f1lL0z3H3viXgVQFmz7niN6OcXPqy4UhOtGGYRHjjt97TDdgps3kZURPBWUmDqmS55ouzW1YYE5J6WeXQs6RK37d8ghMbGy6j/5XBumJN/uJwW7bPSx+vB3Cw3huZJQFsDzL+7ousaRm4v1Piavo1zv7zo3+KytfKk0h2lDrTmd4oD5v5yu+mAyEKBGg4q+908s2u5UvUQnCmDPJ3QbtGwy13KTKpGxWtHEBcGQ0FdqzOx1iOYN5jujvjjwwdVvoHMtBEsXHSefAOqNGFpdJUqjIQqKgBDZy5pWVZpJxzm+APxkAfoeHvWNDmblfkgoMoc7+1XMNkSozbRitOA0UVYc8lCcfFGRbjrVrNGmtvBn/2K6zvd0aEQ7H2IOXgvC6gQzt1BEGX7DKa4jAU2+wmpOSphfhEhBu+GWknMOFzpUd+FPFa74unkrRvH8OhJojPOhp/sYs3PTeCRHIjox6zlL1s6I4+wHwX0tq/3cI4Wb5w9ykwFP7f6lntUT6vYf47leGEw5t6pvqWLWijgolXE1mAzFYv794MxUQA9DOP6rjK7QBwuxm3dnEtaybbRTs52vW20sbvv26YH2MpOLYgiLthWX+U/GpqjLkKxwGPQcL5iZSHyuq1kHa1TbXTVQJgU0Rmxaf7MHMn0brU1gly6IBPesZ0pnNs9rRZTIvSVSB5Ftuyi49qXt+yuM9MFqsPfoTuPZRs2q8fckJbx+gLF5F/848myzTlRAxvDOXp7pf8CK3XAhEnsMUO8fYON5n70UKkDJhPd5kluNBlQC8ItoxtIvpzQGgn8GD8IlUwWkfwbq9BsaLsCButvEr9WHOUHGMVIBvTgE3btgjBnifDCXU55GgRGU8GcEmvZnp9FbFujzkWBcg9ix2fplPSBk++LvTku/DEGMM1gU6xZWBWcuqjEHDPAqKztBQ7PhR9OjfA9c/NQuhMFvSMDtcuf6xgqUTgS1jgAAAAAAAAAAJ0gwVW7+UiANMVYOwL3g+7jaCp0DIGvr1Uh0I1v0vN7NCbo+I+FwvwQb7nw1I7AeQa0Affz4rdb4A+Ab7IPZko8Tsi+NZXh/pWay9GKUPNp0RD6VwYb3kTMuycPrnhkLkLihEcdteEHYPw6x2sSvGz4Yp/+6usSLdQ9/KyYz6DZSPJo1yNqMeXeYo0VlJgq34iFgtErBTCnpS8Vh0Nt+Ws8HLY3G5ZjhE7V8xKf+NLuPODEsti1IHZmOjB5XELUliAm6/pRx8UmgFgdXZRTF1xjEMp5zx/R8j1fjUvqXAXaRSxcmmpsIL12hIztuoW+qGI881EcYHgh4EZ9qxgmrPGY2SakKiTgezXimkIUrd8W8ozWLHlhbS8+GG41TBHm2URfPKnAKjRWDz6sbsL3lW0F+kEWcTGbs55aJqZnr/Z8BmqujRdYWnUD5Q+VA0vIM/OwiqZ3GReOxbpTG0U1B4+pUjia0TJicoy/sd+NcLUrHecDGuO6l2csoyk3oExMdq+SvXboh5jYgC74xRJDXRHM9+Pgl4TVvJxytf3ifte+f2bY9783Y8xUt7UEcDv6jvY2Vl35dnsXKY0pqPs48F6pW9X1tFblbJZtEKwTVinpjLaC8Z3M2PCYYuxlmTMFZomRxTjix3tdmihrW2ITgQJeKTG9tkyVVG4zm3ITBO7ZasgpuCFgqdmqkLyf2LOhwu+tqM4zaUQNuwILS52hs7vpK4CP12uZzcFldaJTonkXdPI03WHrTE2IZmldp2DnvsjAJG6mK2j1qLKbOwtqElJeBconsTvTThlQZUamCceYUqu094z6Yohpl8PC4QK93h30fXCCXJMCI6LFPM2FgYJKP475DLwq4zJZ3hTHxlasu4orz9iEqACQ2Op1zDVG+92LCAAAAIvQsAAAAAHaSXFF/H8zscPlzSzz/Rok/rbPeLEj9dUupK3zxmOBcL8ZiSmxkvX4VPVbKbmzWX7sNKisT/DmEyYMpmr7eOHSLUSa4o1xZ5XMAZypFsp47/cSCbTuLIIhbCsV4rW0RFVCAB+zl3x8NutpBM7o7RNjdyioGrc+u4BYP7YG8/5bhEampCvNyU0lvcGGJW1VE9uxxmLWG/6o6DXXry7MBUWFj7+RUBTu6SNHvTUrioZIAF7X9KGma3wc6uS+guweWLyJyUH3uP8ofeFCQJE6rDIFFtoUc56VR+D8L8n/TdosZzZSY9IMsyMOCeqwoL5ve0FzFyl3eRFfZqwT5MaRWLNvI1tzgHbIRxkmlOV6NRybY3aphkF36vfA+EtVu+g3roUryue4hV/j/l7YOnYY0qSxdVu94l10dMaijYnIiWz/UzWOpZU1zfe7E4T2ifYVpsPga5gDJZBOWhTQWggioRYv6ps/83iGq9g6UJx9mlLSM4HrVS1CM8K3y6NwqN2yslcvnoU90trPKQmG+jqP4jf/947gErgbwR4gBWHcQrRNmxb+nFgNpOGQHzTeZ9C63P/tSZNnCwUDkfOCBnR9O6XzpX4SWcwtOvF5ga1nVHNtTzVVOjkJ1vTXCfw7NwTRiR5A+uHr4Fkd7nf1UDscNUdgXNdzqvqzrQRzeZB0PturLa1HQVTmsLHa501PtPkOX0PCifeDHhhOJLbULZb70QbVbUJABolUVZYwapdR0ONAomVxKPvQBuPzQ14ABH4uhuuAaq+8+r0FZRpe7xFZhy1r6tN0f+9DFSUAuFUtQBqdJ8Vr73FUvOQtmxNuV+hRjsmSzb76x1p7cW3HHWoffakcyLjJyRbG2MjDALmixUfN49xWaWe7F/Gp+hmDZjVcwTmJMm0tmvO34FVK9SzFYJqHAiLdWfXKmioLLwsMraq06QNJyG7E0qT2Xykhuk6cXI5zo0Xwkixgtp5tYXDJLeJpIQLYwWT6b1o+rSxwOEcAeXp/JJTW5div9yj78cXl4+6Ib7JNMtGmgFH8PnMfREho3FCFbMwyVAnmMxn3GTpseA3UCtBS6Uru9Y1/NueX0vZRhq2cX+RfzSpmHKDu8umdQcoPesDOSRKko3V7uIiTpUNC41kUmkJJlvu8/KxZDn5UJuOPCQOoGJGJ2hgWzGahOrtzaFE6/ruuZYTJLzRLW912/A/4LkMcL5B9hpXy2CQyJeuzY+R2Voew9FyoWfHm7mG/OgyDK3stw0llOvyCqxCPoqg+yHV3u2dhDpNO2cYqQiWXXWIpcqfw8jHcddB+yb2/ZZOQuoqerK41SA1CTFC4M8IaeOV/8/XMI9JdkEoT6JqgVPyBhLwgOc+9yrR5gKAMHO/QNGWeD339xNH96e/jnE+Apfuk5syPeYPLykymTyKharYf0zMxnzFn6BsUomBeEXxg1pl7r8LOYuexSq305Esedncz0a5jXEvjDo+k4NhsGF37IGyDJrJFd4qJM5DCVRGAscnysZc3SsKwYBRq5yOS/Jm9zWpri9QJtWKR/KC40PVGBbw5WKKLufSDgpV7uKBL0XoVrVzytOzEFKdVW8ZsJaUyUUkfxqshHJn2HsqXh2sPYuhUWq+nyx7JHUE7SozQB4qG8SuBkPF2xrxQHILoD29amFbHX1arV/zehqcR8I66Fub59TijrZuikuqwNFB+zDtH1xqkAka/QLPw2iZwNXeiN98umHeVBIK9gIwHBzCowdDmNpwrgLc2rC0gEf0LitQNmbXgQrMf11cGIwJuTFv8CCTVKF/Rcb5LfeHPvl2v1iwgbWaBed+V7WXSBYI7GwtA5hzhBM/M1YEwXe7j/YLRTnuvmKakcMkxAHzmlb5NR10r2wAL5jEfr45ni9QnCE1fU+3ZMq4foZAJcUMlQ9gUlqfmCYVHOuV0r94qsgxk5VdWZC96m7SnRWV0dPXZaT+SOsyhpyBfTvP+mtbpXnH3CijscMtE4on6E/3mfMbKKlW+34XOwdZZlUovqFFG6h4tWA8vVgQs/1+bbHDyI2/jKWzJiLibALkdRDAQOByAK5lIpHzU13fsJ303xo9mj4LcspV0UNVaqEnWe3Pgfq6gPm68daGp1uYTDr7AcXeK1k8tjRwV2sIobycjGO5K+Hp3mdZCuFCckFGduMr+EGUfueguKIZn+SnQamKeNQYRT+FGVrB2UVX8fBQ1Nd/HQqc7hP49VjR5PqxKAy8ym2ZA7dJOGDAMV9fRt3xCRkjIVRiCVPPXDy62liCuaGR0wuzJPsc4bUxUMUUmET/go43lCcoSZmXeiOcxt/nnDinALO+t0GBmHLBom2jqiSWTbXUIHdLlFU9QN0fXLT5T5IUKD0QKcuAhv7PM4iQdovO3HSQamN+m4o2fIJMIqI69QxtS3mEkRd3gIuJ7cP/u4mNbWU5LX8llAkCTt7csNMMaCiwJUgHm8DyS79hno6mj1Uu50NZ3TwnlgaHLv3Ty0bb+BIkoCsKegP3++bI3bXcqv+Sv/36iWp4IwEFBHcgm2AlMKvZ1gyK+N8kYoeazQ7ukPnnJj+cGdzSjezHeUMIx6kwM9KMbQzvSmNmPWNhdYNnLUMhuAPqkQKOPMRuyPfOlL1Koxbp8by3ZwnZHN5UBWh5V4aOQiuOdphOwmGezEn2YQuE3QiDxLAz2wDFzCzdE5+2+76RT91pcfUH2qAt91PPBFg4WBMlqrwfFmMpNrvWG/0T0InvaPHSak0/OtetZHQYT6OI8YzGGvORRDaa5KhzlrBU+6dEdVtC1yzHFp7aIT1XvwnPy7mv0yU5QYsqHTjHsEooMq07MbviMCOMipXhFLj+InNvfjGwO3yMclEfJhAAuMRvC3X1Q9ljOZC4PspFy8IeVU1URETDIe335zE8Rd/f6tU4IWgWyAuJu2FKiufksxZ4HQipk7H+ZOESI1dKcAIrpIMDII9FG1lJhzYS8NVtU7vSZVADEQv5LsyQwl8LyudJO/jahib7ZuU37I00+lUBHKJcVS9o8FQUjUc3czCMmT1KlcCC3o4svLDtVAZTRns1i8dQ+MQWFLwiig05k3H1Xdo6yiBNvJdARIIXU+07uv9Od5miTiSDg64oTEA1eCRIKauLlsl0BTXiqcs0NYz9421i308fVOWaBag2d5uAxTNY8DaGBhcjztU0I2bQ8YVYSdMVdi50EbEVOYumhOrmGdHmJoj5U2eLnRDScmD9CFzBh+A2Tp2HnxR5RnfNyCErYUZEy/bHyO8grWOzG/hT0G6OrsaN8mzqI6lD6YcUt77RsGD6XSKLwDXbszZ0Cc+Ce2LptdlBvDXHlHzW1hs6CZPJLRuUrt27kI1Yew/z7cctWRO2LGOCi50Q43Ko3UaBnkJu4mjmz/WepR9+livgEqLrCgnOJb3tNvilNyYHcDk4srXrOAJtkqDXI/oSf6eAkhMF0xVIVrW8tTAXYB8vj7h16uvwhRFr7UyFpiSdAdSBRaEnn4utuGr9T/PUA+qIDtkjFEucNpcPQmKbqS3slKsKSFUcIGOI1ODDqPtcHdl3dJcEoPDmEcWQjbLJkQGmYrK4Fv3yQVfgZ0HHys0NJ0HyCuT9nXO6Hguoz0aLHA/2eJl2pWkWVvjgJBl4vJrJmmvoTei2lpV3U7rPJXE6RY1IzBnGrUAObwoLNpYABDVzfW7FWDdIkEgFstnos3l1PFKjz3imIGiZBNrHyO9XYBDmnVcAVvhH0gbpCec0jskjJ4lT6pBMoS7ORFU5kzFpr6RzsppYN7wBjkey5K0+KOcRFNR8PzpJrUCzKNxoL26nhh3u4wP+l3eQWO6sf09ovE+sm4BU7H+pcaGILsN2WO5Xy0YHwuP8UsDPfBhX0+LDwHSS32XtYBtCSkPpCQN7NhEIn3l9tHZJAHOJi1E+/3lbgCOruLWzqaixpkn9FjApQLONuYHYoNALf2hGJqtjr1055mWVe9k7XwMOBltzJmDRyT+hJ/p4BjyKDunaIYi8TzFh7tAnkpwy2HwVFDFYB7wFUGI9lDN22W7cgwcCc9GK0RVHXiQ6NL3iioRRaJd5UJiQQPNiy2evClhkFxD3KOKpCJooXVjPHzl+fG5UTnB5h6v+9Xuo982JvBElIx5PsKFJhn4rSL6W1hazGyLgwZpRbKJD8FjDUGbUbUAIgn+h4ex5ZGgxc3cinlnwjVHbS8SgYqCTRJYRKJWqWON8fdlJrh9Gx5nw29grtm/MSn6tIr8Gx2s5MDBWalUvHJ5NGEIowa19SBJJg8TLjeqwLAQ1YE5xJsjP1H3rnxN+N/3sLBb2CmbxTwO0oEuQOInyF6ZYyz3DW3keF7Eq5SDVOKt+/1LY7GlFFeVMbCKwnIptOBlATk8UjTM9i29iipvumqaNRxELubiGu84ialKiZPFfOKBbyRZKdGmGAnJ77RwVqjcQeEcvzoujCgcqv8Wbc5Lc8pwLNh5bPF2fCaJg+LT/rrQTEq4BF2eQ1e+1p72XVDDDQUGh4Xo8W6LIbb1vqtWw/Ut88X8DLYWV7Ce6m9rzU5yowZtpQfzrVBZUXsfki3XoXjLk6Hq0ROX6oO7l0uByML2jLtlqNjnwmYd+xw18vHNpLRObFp1UCxiy1JEBr77vEdyoxqEbKgN657T1mUKgo2SUaHsP4i/VZDOOIxBzVB9UtiYYdOFY1r3BFyrkcr6uTEy60QvKI7AGIzJBnoLN4JAt2Vv7VSZPxoqvBe8yPDo/3lHUGy3Ggr3VnXrx6S66GH07YfRDGZQEfiNP+CMOpEXl1O8RYQLfp65LmsCU5BcU6IpFuy196cZU1zmPJfZqyg3ICk6Y0RxcOIOVtv3R584T8hdMHQR7hJAllfRjZFxWD+oXR0go8S/Z55oN76Vr8moHWH/XBK3A4xq3SjIKccms096oZmLvk3zyCQQ4kcUw6yMgCakK1oeQTpRbtvHgE2Z4jkSxqWmSf6tdUT1AR54KLQIOgCFWy5nsVQjh1UDiIs7jMzLsin1hYULXQR/IcnVBSthd5dGwdWH/yjjo1YSF3pwTRM4aPgM1qBcUs9gJwKkjbwt19Up5KoSG0mdC0T4+8gQppzgsQwXwynaUOkmX0YuX4U6FV0lsrwgcNe89Pnmz0rnjGwQsH+PQ7zjpeO1N3VrjQSuFCIedWiQHoaImDu0xdJ64KjHS8+Vu8yiKShvAgAAAAMQUMpkT4RGbcd5Aile0LiTSp55PgjfErrfCgikQhNLuGYshk4gB+5ntkcGBYW+/5frJ8+ooAyCXdKQRjRdQLsAL0EaThJa6cSpqPWc+s3bexBHIGsNTOaJ5Z1wehNjw0FIb8XQGXmrE/4wg9gND3yj5DOaiV+1tO9z2i02dHAQnIcw4n0/VAtYPUnJL8jBcR5Jmo3yPq8/IbF4Cw0wvFpDixKk0Vh8bnoxQOHkmozKrKS/dxru55HaRuXk8wiqsQC0Iwc9huCeqwehOr8iC91bFCW/0NUiAkCGl9yOmUQn65WyGiQl5K4D7QRpcTIJe/vhMRa/aL6ZmxA05xv0k6grx4WxVfa5mv887/UjekVsLV7CsE9XWTKVNv2Y82ybeZFMWOxvJvEQ6rJe3tOJmV+kf0L+2/FeMbXsTXOzP4Fl3XwSJ4mu3BohDk3Lp9gTwEIGtoXIMTrdzt1NoNET+ovXQi2Mbbt2UumnRzOYBHIvYNbMcRvbe5itoTapfPjsji2BB0wYLATOinYBQAEccCW47IfqYW/nSkTfk+Hr/QpqBtID1IWaoatAADe2FbyDYWxag0CJ0/Vc1JgOqeSikpTcwodSvY9LQms35xHcWK/KEEFBVaxDYxYwrarWgGpUls0weivI8ccomadh78qRsNCxn/BVr/pyUPN4vNIs21rEUzdAmSJqVMzZaxs15GuIdZypGO8p3R6ifMDXgXMgCtW0sRXktdtRcPE+Y3wNMbXtiWyiLmAOY7UD9PiHvE57X58yjWW4AOfcRMlEBEzqkfWq2b75DvEvNzT6Dj1ohRnFx87pOa/LPCoCV4aitUe4RcVgnkAJ0HK6v8fVT+KFby/erjmS4tlpxVUSJeGM6si2JWHSfKl8bmZw2x3yxKKNM9xZwN2ANWrX7I//iogppksIVgmDmiyhNkLIYxxfWr6IBjG2LcD80keMt6+zf1TXuI/WTNtpCU+3iHBysLzam2STc40RakM4qUDVp9QXFLXlY9G+KTJ/Hoyycnm4Ez5CSl/T9jvbXabrJjK1riGGBjU3PupfpIb4niHl7rPi+a/awph0wI03gA7B+oqYsqORpxR+ewUiAbKoxC0dhSl+Stl/jfWFtRg1pAijug34WrfJSP2nkG/r7uQ5nCLA0GVq5lADrpHchJrfrF9OxuwvxBgOvkT4p+Josx/cPsJ1zDvfHpapzqqzpPdhoJnhzn1+DzVYOU15FI8lRRYiAAAAAjyM8SAAAAAAAA==",
      "width": 412,
      "height": 4245
    },
    "nodes": {
      "page-0-IMG": {
        "id": "",
        "top": 3006,
        "bottom": 3129,
        "left": 1632,
        "right": 1825,
        "width": 193,
        "height": 123
      },
      "page-1-IMG": {
        "id": "",
        "top": 377,
        "bottom": 482,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 105
      },
      "page-2-IMG": {
        "id": "",
        "top": 2305,
        "bottom": 2410,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "page-3-IMG": {
        "id": "",
        "top": 1582,
        "bottom": 1687,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 105
      },
      "page-4-IMG": {
        "id": "",
        "top": 3006,
        "bottom": 3114,
        "left": 211,
        "right": 404,
        "width": 193,
        "height": 109
      },
      "page-5-IMG": {
        "id": "",
        "top": 56,
        "bottom": 288,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 232
      },
      "page-6-DIV": {
        "id": "itemWrapper",
        "top": 0,
        "bottom": 55,
        "left": 167,
        "right": 412,
        "width": 245,
        "height": 55
      },
      "page-7-A": {
        "id": "",
        "top": 377,
        "bottom": 482,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 105
      },
      "page-8-A": {
        "id": "",
        "top": 498,
        "bottom": 603,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "page-9-A": {
        "id": "",
        "top": 619,
        "bottom": 723,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "page-10-A": {
        "id": "",
        "top": 739,
        "bottom": 844,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "page-11-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "page-12-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "page-13-DIV": {
        "id": "section-stories",
        "top": 56,
        "bottom": 2418,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 2362
      },
      "page-14-path": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-0-SPAN": {
        "id": "",
        "top": 2484,
        "bottom": 2510,
        "left": 70,
        "right": 281,
        "width": 211,
        "height": 26
      },
      "1-1-DIV": {
        "id": "",
        "top": 56,
        "bottom": 3983,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 3927
      },
      "1-2-H5": {
        "id": "",
        "top": 2639,
        "bottom": 2659,
        "left": 0,
        "right": 193,
        "width": 193,
        "height": 20
      },
      "1-3-IMG": {
        "id": "",
        "top": 3006,
        "bottom": 3114,
        "left": 8,
        "right": 201,
        "width": 193,
        "height": 109
      },
      "1-4-IMG": {
        "id": "",
        "top": 3006,
        "bottom": 3114,
        "left": 211,
        "right": 404,
        "width": 193,
        "height": 109
      },
      "1-5-IMG": {
        "id": "",
        "top": 3006,
        "bottom": 3114,
        "left": 414,
        "right": 607,
        "width": 193,
        "height": 109
      },
      "1-6-IMG": {
        "id": "",
        "top": 3006,
        "bottom": 3114,
        "left": 617,
        "right": 810,
        "width": 193,
        "height": 109
      },
      "1-7-IMG": {
        "id": "",
        "top": 3006,
        "bottom": 3114,
        "left": 820,
        "right": 1013,
        "width": 193,
        "height": 109
      },
      "1-8-IMG": {
        "id": "",
        "top": 3006,
        "bottom": 3114,
        "left": 1023,
        "right": 1216,
        "width": 193,
        "height": 109
      },
      "1-9-IMG": {
        "id": "",
        "top": 3006,
        "bottom": 3114,
        "left": 1226,
        "right": 1419,
        "width": 193,
        "height": 109
      },
      "1-10-IMG": {
        "id": "",
        "top": 3006,
        "bottom": 3114,
        "left": 1429,
        "right": 1622,
        "width": 193,
        "height": 109
      },
      "1-11-IMG": {
        "id": "",
        "top": 3006,
        "bottom": 3129,
        "left": 1632,
        "right": 1825,
        "width": 193,
        "height": 123
      },
      "1-12-IMG": {
        "id": "",
        "top": 3694,
        "bottom": 3803,
        "left": 8,
        "right": 201,
        "width": 193,
        "height": 109
      },
      "1-13-IMG": {
        "id": "",
        "top": 3694,
        "bottom": 3803,
        "left": 211,
        "right": 404,
        "width": 193,
        "height": 109
      },
      "1-14-IMG": {
        "id": "",
        "top": 3694,
        "bottom": 3803,
        "left": 414,
        "right": 607,
        "width": 193,
        "height": 109
      },
      "1-15-IMG": {
        "id": "",
        "top": 3694,
        "bottom": 3803,
        "left": 617,
        "right": 810,
        "width": 193,
        "height": 109
      },
      "1-16-IMG": {
        "id": "",
        "top": 3694,
        "bottom": 3803,
        "left": 820,
        "right": 1013,
        "width": 193,
        "height": 109
      },
      "1-17-IMG": {
        "id": "",
        "top": 3694,
        "bottom": 3803,
        "left": 1023,
        "right": 1216,
        "width": 193,
        "height": 109
      },
      "1-18-IMG": {
        "id": "",
        "top": 3694,
        "bottom": 3803,
        "left": 1226,
        "right": 1419,
        "width": 193,
        "height": 109
      },
      "1-19-IMG": {
        "id": "",
        "top": 3694,
        "bottom": 3803,
        "left": 1429,
        "right": 1622,
        "width": 193,
        "height": 109
      },
      "1-20-IMG": {
        "id": "",
        "top": 3694,
        "bottom": 3803,
        "left": 1632,
        "right": 1825,
        "width": 193,
        "height": 109
      },
      "1-21-A": {
        "id": "",
        "top": 2057,
        "bottom": 2110,
        "left": 32,
        "right": 351,
        "width": 318,
        "height": 53
      },
      "1-22-A": {
        "id": "Facebook",
        "top": 4155,
        "bottom": 4183,
        "left": 26,
        "right": 75,
        "width": 49,
        "height": 28
      },
      "1-23-A": {
        "id": "Twitter",
        "top": 4155,
        "bottom": 4183,
        "left": 75,
        "right": 124,
        "width": 49,
        "height": 28
      },
      "1-24-A": {
        "id": "Pinterest",
        "top": 4155,
        "bottom": 4183,
        "left": 173,
        "right": 197,
        "width": 24,
        "height": 28
      },
      "1-25-A": {
        "id": "skipToMain",
        "top": 10,
        "bottom": 30,
        "left": -999,
        "right": -843,
        "width": 156,
        "height": 20
      },
      "1-26-INPUT": {
        "id": "",
        "top": 109,
        "bottom": 165,
        "left": -362,
        "right": -74,
        "width": 287,
        "height": 56
      },
      "1-27-DIV": {
        "id": "",
        "top": 274,
        "bottom": 347,
        "left": 44,
        "right": 332,
        "width": 288,
        "height": 74
      },
      "1-28-A": {
        "id": "logoContainer",
        "top": 12,
        "bottom": 44,
        "left": 60,
        "right": 152,
        "width": 92,
        "height": 32
      },
      "1-29-A": {
        "id": "homeLink",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-30-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-31-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-32-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-33-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-34-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-35-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-36-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-37-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-38-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-39-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-40-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-41-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-42-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-43-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-44-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-45-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-46-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-47-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-48-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-49-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-50-A": {
        "id": "hubLogo",
        "top": 32,
        "bottom": 77,
        "left": -378,
        "right": -248,
        "width": 129,
        "height": 45
      },
      "1-51-A": {
        "id": "",
        "top": 236,
        "bottom": 295,
        "left": -378,
        "right": -34,
        "width": 343,
        "height": 59
      },
      "1-52-A": {
        "id": "",
        "top": 311,
        "bottom": 371,
        "left": -378,
        "right": -34,
        "width": 343,
        "height": 59
      },
      "1-53-A": {
        "id": "",
        "top": 56,
        "bottom": 369,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 313
      },
      "1-54-A": {
        "id": "",
        "top": 377,
        "bottom": 482,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 105
      },
      "1-55-A": {
        "id": "",
        "top": 498,
        "bottom": 603,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-56-A": {
        "id": "",
        "top": 619,
        "bottom": 723,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-57-A": {
        "id": "",
        "top": 739,
        "bottom": 844,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-58-A": {
        "id": "",
        "top": 860,
        "bottom": 964,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-59-A": {
        "id": "",
        "top": 980,
        "bottom": 1084,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-60-A": {
        "id": "",
        "top": 1100,
        "bottom": 1205,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-61-A": {
        "id": "",
        "top": 1221,
        "bottom": 1325,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-62-A": {
        "id": "",
        "top": 1341,
        "bottom": 1446,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-63-A": {
        "id": "",
        "top": 1462,
        "bottom": 1566,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-64-A": {
        "id": "",
        "top": 1582,
        "bottom": 1687,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 105
      },
      "1-65-A": {
        "id": "",
        "top": 1703,
        "bottom": 1807,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-66-A": {
        "id": "",
        "top": 1823,
        "bottom": 1928,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-67-A": {
        "id": "",
        "top": 1944,
        "bottom": 2048,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-68-A": {
        "id": "",
        "top": 2064,
        "bottom": 2169,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-69-A": {
        "id": "",
        "top": 2185,
        "bottom": 2289,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-70-A": {
        "id": "",
        "top": 2305,
        "bottom": 2410,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 104
      },
      "1-71-A": {
        "id": "",
        "top": 2452,
        "bottom": 2570,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 118
      },
      "1-72-A": {
        "id": "",
        "top": 2620,
        "bottom": 2672,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 52
      },
      "1-73-A": {
        "id": "",
        "top": 2672,
        "bottom": 2989,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 316
      },
      "1-74-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-75-A": {
        "id": "",
        "top": 3006,
        "bottom": 3234,
        "left": 8,
        "right": 201,
        "width": 193,
        "height": 229
      },
      "1-76-A": {
        "id": "",
        "top": 3006,
        "bottom": 3234,
        "left": 211,
        "right": 404,
        "width": 193,
        "height": 229
      },
      "1-77-A": {
        "id": "",
        "top": 3006,
        "bottom": 3234,
        "left": 414,
        "right": 607,
        "width": 193,
        "height": 229
      },
      "1-78-A": {
        "id": "",
        "top": 3006,
        "bottom": 3234,
        "left": 617,
        "right": 810,
        "width": 193,
        "height": 229
      },
      "1-79-A": {
        "id": "",
        "top": 3006,
        "bottom": 3234,
        "left": 820,
        "right": 1013,
        "width": 193,
        "height": 229
      },
      "1-80-A": {
        "id": "",
        "top": 3006,
        "bottom": 3234,
        "left": 1023,
        "right": 1216,
        "width": 193,
        "height": 229
      },
      "1-81-A": {
        "id": "",
        "top": 3006,
        "bottom": 3234,
        "left": 1226,
        "right": 1419,
        "width": 193,
        "height": 229
      },
      "1-82-A": {
        "id": "",
        "top": 3006,
        "bottom": 3234,
        "left": 1429,
        "right": 1622,
        "width": 193,
        "height": 229
      },
      "1-83-A": {
        "id": "",
        "top": 3006,
        "bottom": 3249,
        "left": 1632,
        "right": 1825,
        "width": 193,
        "height": 243
      },
      "1-84-A": {
        "id": "",
        "top": 3269,
        "bottom": 3293,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 24
      },
      "1-85-A": {
        "id": "",
        "top": 3309,
        "bottom": 3361,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 52
      },
      "1-86-A": {
        "id": "",
        "top": 3361,
        "bottom": 3677,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 316
      },
      "1-87-A": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-88-A": {
        "id": "",
        "top": 3694,
        "bottom": 3923,
        "left": 8,
        "right": 201,
        "width": 193,
        "height": 229
      },
      "1-89-A": {
        "id": "",
        "top": 3694,
        "bottom": 3923,
        "left": 211,
        "right": 404,
        "width": 193,
        "height": 229
      },
      "1-90-A": {
        "id": "",
        "top": 3694,
        "bottom": 3923,
        "left": 414,
        "right": 607,
        "width": 193,
        "height": 229
      },
      "1-91-A": {
        "id": "",
        "top": 3694,
        "bottom": 3923,
        "left": 617,
        "right": 810,
        "width": 193,
        "height": 229
      },
      "1-92-A": {
        "id": "",
        "top": 3694,
        "bottom": 3923,
        "left": 820,
        "right": 1013,
        "width": 193,
        "height": 229
      },
      "1-93-A": {
        "id": "",
        "top": 3694,
        "bottom": 3923,
        "left": 1023,
        "right": 1216,
        "width": 193,
        "height": 229
      },
      "1-94-A": {
        "id": "",
        "top": 3694,
        "bottom": 3923,
        "left": 1226,
        "right": 1419,
        "width": 193,
        "height": 229
      },
      "1-95-A": {
        "id": "",
        "top": 3694,
        "bottom": 3923,
        "left": 1429,
        "right": 1622,
        "width": 193,
        "height": 229
      },
      "1-96-A": {
        "id": "",
        "top": 3694,
        "bottom": 3923,
        "left": 1632,
        "right": 1825,
        "width": 193,
        "height": 229
      },
      "1-97-A": {
        "id": "",
        "top": 3943,
        "bottom": 3967,
        "left": 34,
        "right": 378,
        "width": 343,
        "height": 24
      },
      "1-98-A": {
        "id": "",
        "top": 4023,
        "bottom": 4041,
        "left": 26,
        "right": 69,
        "width": 43,
        "height": 18
      },
      "1-99-A": {
        "id": "",
        "top": 4023,
        "bottom": 4041,
        "left": 76,
        "right": 198,
        "width": 123,
        "height": 18
      },
      "1-100-A": {
        "id": "",
        "top": 4051,
        "bottom": 4069,
        "left": 26,
        "right": 256,
        "width": 230,
        "height": 18
      },
      "1-101-A": {
        "id": "",
        "top": 4051,
        "bottom": 4069,
        "left": 263,
        "right": 366,
        "width": 102,
        "height": 18
      },
      "1-102-A": {
        "id": "",
        "top": 4079,
        "bottom": 4097,
        "left": 26,
        "right": 96,
        "width": 70,
        "height": 18
      },
      "1-103-A": {
        "id": "",
        "top": 4079,
        "bottom": 4097,
        "left": 103,
        "right": 198,
        "width": 95,
        "height": 18
      },
      "1-104-A": {
        "id": "",
        "top": 4079,
        "bottom": 4097,
        "left": 205,
        "right": 358,
        "width": 153,
        "height": 18
      },
      "1-105-A": {
        "id": "",
        "top": 4107,
        "bottom": 4125,
        "left": 26,
        "right": 192,
        "width": 166,
        "height": 18
      },
      "1-106-A": {
        "id": "",
        "top": 4107,
        "bottom": 4125,
        "left": 199,
        "right": 375,
        "width": 177,
        "height": 18
      },
      "1-107-A": {
        "id": "Instagram",
        "top": 4155,
        "bottom": 4183,
        "left": 124,
        "right": 173,
        "width": 49,
        "height": 28
      },
      "1-108-LABEL": {
        "id": "",
        "top": 109,
        "bottom": 165,
        "left": -378,
        "right": -58,
        "width": 319,
        "height": 56
      },
      "1-109-IMG": {
        "id": "logo",
        "top": 12,
        "bottom": 44,
        "left": 60,
        "right": 152,
        "width": 92,
        "height": 32
      },
      "1-110-IMG": {
        "id": "sidebarLogo",
        "top": 32,
        "bottom": 77,
        "left": -378,
        "right": -248,
        "width": 129,
        "height": 45
      },
      "1-111-IMG": {
        "id": "",
        "top": 56,
        "bottom": 288,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 232
      },
      "1-112-IMG": {
        "id": "",
        "top": 377,
        "bottom": 482,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 105
      },
      "1-113-IMG": {
        "id": "",
        "top": 498,
        "bottom": 603,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-114-IMG": {
        "id": "",
        "top": 619,
        "bottom": 723,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-115-IMG": {
        "id": "",
        "top": 739,
        "bottom": 844,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-116-IMG": {
        "id": "",
        "top": 860,
        "bottom": 964,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-117-IMG": {
        "id": "",
        "top": 980,
        "bottom": 1084,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-118-IMG": {
        "id": "",
        "top": 1100,
        "bottom": 1205,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-119-IMG": {
        "id": "",
        "top": 1221,
        "bottom": 1325,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-120-IMG": {
        "id": "",
        "top": 1341,
        "bottom": 1446,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-121-IMG": {
        "id": "",
        "top": 1462,
        "bottom": 1566,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-122-IMG": {
        "id": "",
        "top": 1582,
        "bottom": 1687,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 105
      },
      "1-123-IMG": {
        "id": "",
        "top": 1703,
        "bottom": 1807,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-124-IMG": {
        "id": "",
        "top": 1823,
        "bottom": 1928,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-125-IMG": {
        "id": "",
        "top": 1944,
        "bottom": 2048,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-126-IMG": {
        "id": "",
        "top": 2064,
        "bottom": 2169,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-127-IMG": {
        "id": "",
        "top": 2185,
        "bottom": 2289,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-128-IMG": {
        "id": "",
        "top": 2305,
        "bottom": 2410,
        "left": 273,
        "right": 378,
        "width": 104,
        "height": 104
      },
      "1-129-IMG": {
        "id": "",
        "top": 2672,
        "bottom": 2904,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 232
      },
      "1-130-IMG": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-131-IMG": {
        "id": "",
        "top": 3361,
        "bottom": 3592,
        "left": 0,
        "right": 412,
        "width": 412,
        "height": 232
      },
      "1-132-IMG": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-133-IMG": {
        "id": "",
        "top": 4155,
        "bottom": 4179,
        "left": 124,
        "right": 148,
        "width": 24,
        "height": 24
      },
      "1-134-DIV": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-135-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-136-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-137-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-138-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-139-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-140-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-141-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-142-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-143-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-144-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-145-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-146-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-147-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-148-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-149-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-150-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-151-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-152-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-153-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-154-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-155-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-156-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-157-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-158-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-159-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-160-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-161-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-162-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-163-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-164-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-165-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-166-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-167-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-168-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-169-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-170-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-171-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-172-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-173-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-174-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-175-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-176-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-177-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-178-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-179-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-180-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-181-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-182-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-183-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-184-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-185-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-186-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-187-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-188-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-189-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-190-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-191-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-192-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-193-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-194-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-195-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-196-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-197-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-198-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-199-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-200-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-201-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-202-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-203-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-204-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-205-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-206-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-207-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-208-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-209-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-210-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-211-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-212-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-213-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-214-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-215-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-216-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-217-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-218-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-219-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-220-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-221-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-222-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-223-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-224-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-225-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-226-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-227-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-228-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-229-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-230-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-231-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-232-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-233-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-234-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-235-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-236-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-237-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-238-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-239-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-240-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-241-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-242-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-243-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-244-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-245-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-246-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-247-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-248-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-249-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-250-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-251-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-252-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-253-LINK": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-254-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-255-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-256-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-257-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-258-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-259-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-260-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-261-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-262-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-263-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "1-264-META": {
        "id": "",
        "top": 0,
        "bottom": 0,
        "left": 0,
        "right": 0,
        "width": 0,
        "height": 0
      }
    }
  },
  "timing": {
    "entries": [
      {
        "startTime": 2198.16,
        "name": "lh:config",
        "duration": 944.35,
        "entryType": "measure"
      },
      {
        "startTime": 2202.38,
        "name": "lh:config:resolveArtifactsToDefns",
        "duration": 67.63,
        "entryType": "measure"
      },
      {
        "startTime": 3142.98,
        "name": "lh:runner:gather",
        "duration": 12204.39,
        "entryType": "measure"
      },
      {
        "startTime": 3369.73,
        "name": "lh:driver:connect",
        "duration": 14.84,
        "entryType": "measure"
      },
      {
        "startTime": 3385.18,
        "name": "lh:driver:navigate",
        "duration": 12.84,
        "entryType": "measure"
      },
      {
        "startTime": 3398.74,
        "name": "lh:gather:getBenchmarkIndex",
        "duration": 1015.11,
        "entryType": "measure"
      },
      {
        "startTime": 4414.88,
        "name": "lh:gather:getVersion",
        "duration": 2.1,
        "entryType": "measure"
      },
      {
        "startTime": 4417.24,
        "name": "lh:gather:getDevicePixelRatio",
        "duration": 2.49,
        "entryType": "measure"
      },
      {
        "startTime": 4420.62,
        "name": "lh:prepare:navigationMode",
        "duration": 56.94,
        "entryType": "measure"
      },
      {
        "startTime": 4422.37,
        "name": "lh:gather:getVersion",
        "duration": 0.99,
        "entryType": "measure"
      },
      {
        "startTime": 4460.47,
        "name": "lh:storage:clearDataForOrigin",
        "duration": 5.18,
        "entryType": "measure"
      },
      {
        "startTime": 4466.06,
        "name": "lh:storage:clearBrowserCaches",
        "duration": 7.38,
        "entryType": "measure"
      },
      {
        "startTime": 4475.35,
        "name": "lh:gather:prepareThrottlingAndNetwork",
        "duration": 2.13,
        "entryType": "measure"
      },
      {
        "startTime": 4529.9,
        "name": "lh:driver:navigate",
        "duration": 4564.91,
        "entryType": "measure"
      },
      {
        "startTime": 10165.28,
        "name": "lh:computed:NetworkRecords",
        "duration": 13.17,
        "entryType": "measure"
      },
      {
        "startTime": 10179.75,
        "name": "lh:gather:getArtifact:DevtoolsLog",
        "duration": 0.11,
        "entryType": "measure"
      },
      {
        "startTime": 10179.9,
        "name": "lh:gather:getArtifact:Trace",
        "duration": 0.04,
        "entryType": "measure"
      },
      {
        "startTime": 10179.95,
        "name": "lh:gather:getArtifact:Accessibility",
        "duration": 1009.87,
        "entryType": "measure"
      },
      {
        "startTime": 11189.97,
        "name": "lh:gather:getArtifact:AnchorElements",
        "duration": 209.56,
        "entryType": "measure"
      },
      {
        "startTime": 11399.59,
        "name": "lh:gather:getArtifact:ConsoleMessages",
        "duration": 0.11,
        "entryType": "measure"
      },
      {
        "startTime": 11399.73,
        "name": "lh:gather:getArtifact:CSSUsage",
        "duration": 105.31,
        "entryType": "measure"
      },
      {
        "startTime": 11505.11,
        "name": "lh:gather:getArtifact:Doctype",
        "duration": 2.43,
        "entryType": "measure"
      },
      {
        "startTime": 11507.61,
        "name": "lh:gather:getArtifact:Inputs",
        "duration": 12.64,
        "entryType": "measure"
      },
      {
        "startTime": 11520.34,
        "name": "lh:gather:getArtifact:ImageElements",
        "duration": 502.51,
        "entryType": "measure"
      },
      {
        "startTime": 12023.31,
        "name": "lh:gather:getArtifact:InspectorIssues",
        "duration": 0.46,
        "entryType": "measure"
      },
      {
        "startTime": 12023.82,
        "name": "lh:gather:getArtifact:JsUsage",
        "duration": 0.19,
        "entryType": "measure"
      },
      {
        "startTime": 12024.06,
        "name": "lh:gather:getArtifact:LinkElements",
        "duration": 39.01,
        "entryType": "measure"
      },
      {
        "startTime": 12057.02,
        "name": "lh:computed:MainResource",
        "duration": 5.53,
        "entryType": "measure"
      },
      {
        "startTime": 12063.18,
        "name": "lh:gather:getArtifact:MainDocumentContent",
        "duration": 10.44,
        "entryType": "measure"
      },
      {
        "startTime": 12073.69,
        "name": "lh:gather:getArtifact:MetaElements",
        "duration": 9.91,
        "entryType": "measure"
      },
      {
        "startTime": 12083.72,
        "name": "lh:gather:getArtifact:NetworkUserAgent",
        "duration": 0.39,
        "entryType": "measure"
      },
      {
        "startTime": 12084.17,
        "name": "lh:gather:getArtifact:RobotsTxt",
        "duration": 14.91,
        "entryType": "measure"
      },
      {
        "startTime": 12099.15,
        "name": "lh:gather:getArtifact:Scripts",
        "duration": 0.55,
        "entryType": "measure"
      },
      {
        "startTime": 12099.79,
        "name": "lh:gather:getArtifact:SourceMaps",
        "duration": 180.11,
        "entryType": "measure"
      },
      {
        "startTime": 12279.95,
        "name": "lh:gather:getArtifact:Stacks",
        "duration": 32,
        "entryType": "measure"
      },
      {
        "startTime": 12280.33,
        "name": "lh:gather:collectStacks",
        "duration": 31.56,
        "entryType": "measure"
      },
      {
        "startTime": 12312,
        "name": "lh:gather:getArtifact:Stylesheets",
        "duration": 74.09,
        "entryType": "measure"
      },
      {
        "startTime": 12386.47,
        "name": "lh:gather:getArtifact:TraceElements",
        "duration": 1166.69,
        "entryType": "measure"
      },
      {
        "startTime": 12386.98,
        "name": "lh:computed:TraceEngineResult",
        "duration": 1099.66,
        "entryType": "measure"
      },
      {
        "startTime": 12387.2,
        "name": "lh:computed:ProcessedTrace",
        "duration": 109.31,
        "entryType": "measure"
      },
      {
        "startTime": 12504.68,
        "name": "lh:computed:TraceEngineResult:total",
        "duration": 967.96,
        "entryType": "measure"
      },
      {
        "startTime": 12504.75,
        "name": "lh:computed:TraceEngineResult:parse",
        "duration": 480.66,
        "entryType": "measure"
      },
      {
        "startTime": 12506.5,
        "name": "lh:computed:TraceEngineResult:parse:handleEvent",
        "duration": 305.29,
        "entryType": "measure"
      },
      {
        "startTime": 12811.9,
        "name": "lh:computed:TraceEngineResult:parse:Meta:finalize",
        "duration": 2.03,
        "entryType": "measure"
      },
      {
        "startTime": 12814.79,
        "name": "lh:computed:TraceEngineResult:parse:AnimationFrames:finalize",
        "duration": 1.48,
        "entryType": "measure"
      },
      {
        "startTime": 12816.35,
        "name": "lh:computed:TraceEngineResult:parse:Animations:finalize",
        "duration": 2.07,
        "entryType": "measure"
      },
      {
        "startTime": 12818.48,
        "name": "lh:computed:TraceEngineResult:parse:Samples:finalize",
        "duration": 1.49,
        "entryType": "measure"
      },
      {
        "startTime": 12820.05,
        "name": "lh:computed:TraceEngineResult:parse:AuctionWorklets:finalize",
        "duration": 1.64,
        "entryType": "measure"
      },
      {
        "startTime": 12821.76,
        "name": "lh:computed:TraceEngineResult:parse:NetworkRequests:finalize",
        "duration": 21.47,
        "entryType": "measure"
      },
      {
        "startTime": 12843.39,
        "name": "lh:computed:TraceEngineResult:parse:Renderer:finalize",
        "duration": 50.42,
        "entryType": "measure"
      },
      {
        "startTime": 12893.91,
        "name": "lh:computed:TraceEngineResult:parse:Flows:finalize",
        "duration": 19.66,
        "entryType": "measure"
      },
      {
        "startTime": 12913.67,
        "name": "lh:computed:TraceEngineResult:parse:AsyncJSCalls:finalize",
        "duration": 2.65,
        "entryType": "measure"
      },
      {
        "startTime": 12916.41,
        "name": "lh:computed:TraceEngineResult:parse:DOMStats:finalize",
        "duration": 1.32,
        "entryType": "measure"
      },
      {
        "startTime": 12917.82,
        "name": "lh:computed:TraceEngineResult:parse:UserTimings:finalize",
        "duration": 1.41,
        "entryType": "measure"
      },
      {
        "startTime": 12919.31,
        "name": "lh:computed:TraceEngineResult:parse:ExtensionTraceData:finalize",
        "duration": 2.07,
        "entryType": "measure"
      },
      {
        "startTime": 12921.43,
        "name": "lh:computed:TraceEngineResult:parse:LayerTree:finalize",
        "duration": 2.83,
        "entryType": "measure"
      },
      {
        "startTime": 12924.31,
        "name": "lh:computed:TraceEngineResult:parse:Frames:finalize",
        "duration": 21.22,
        "entryType": "measure"
      },
      {
        "startTime": 12945.61,
        "name": "lh:computed:TraceEngineResult:parse:GPU:finalize",
        "duration": 1.42,
        "entryType": "measure"
      },
      {
        "startTime": 12947.1,
        "name": "lh:computed:TraceEngineResult:parse:ImagePainting:finalize",
        "duration": 2.09,
        "entryType": "measure"
      },
      {
        "startTime": 12949.4,
        "name": "lh:computed:TraceEngineResult:parse:Initiators:finalize",
        "duration": 2.35,
        "entryType": "measure"
      },
      {
        "startTime": 12951.8,
        "name": "lh:computed:TraceEngineResult:parse:Invalidations:finalize",
        "duration": 1.23,
        "entryType": "measure"
      },
      {
        "startTime": 12953.08,
        "name": "lh:computed:TraceEngineResult:parse:PageLoadMetrics:finalize",
        "duration": 3.32,
        "entryType": "measure"
      },
      {
        "startTime": 12956.45,
        "name": "lh:computed:TraceEngineResult:parse:LargestImagePaint:finalize",
        "duration": 1.6,
        "entryType": "measure"
      },
      {
        "startTime": 12958.09,
        "name": "lh:computed:TraceEngineResult:parse:LargestTextPaint:finalize",
        "duration": 1.21,
        "entryType": "measure"
      },
      {
        "startTime": 12959.33,
        "name": "lh:computed:TraceEngineResult:parse:Screenshots:finalize",
        "duration": 8.13,
        "entryType": "measure"
      },
      {
        "startTime": 12967.52,
        "name": "lh:computed:TraceEngineResult:parse:LayoutShifts:finalize",
        "duration": 3.43,
        "entryType": "measure"
      },
      {
        "startTime": 12971.01,
        "name": "lh:computed:TraceEngineResult:parse:Memory:finalize",
        "duration": 1.24,
        "entryType": "measure"
      },
      {
        "startTime": 12972.28,
        "name": "lh:computed:TraceEngineResult:parse:PageFrames:finalize",
        "duration": 1.21,
        "entryType": "measure"
      },
      {
        "startTime": 12973.52,
        "name": "lh:computed:TraceEngineResult:parse:Scripts:finalize",
        "duration": 4.6,
        "entryType": "measure"
      },
      {
        "startTime": 12978.22,
        "name": "lh:computed:TraceEngineResult:parse:SelectorStats:finalize",
        "duration": 1.29,
        "entryType": "measure"
      },
      {
        "startTime": 12979.56,
        "name": "lh:computed:TraceEngineResult:parse:UserInteractions:finalize",
        "duration": 1.81,
        "entryType": "measure"
      },
      {
        "startTime": 12981.41,
        "name": "lh:computed:TraceEngineResult:parse:Workers:finalize",
        "duration": 1.27,
        "entryType": "measure"
      },
      {
        "startTime": 12982.72,
        "name": "lh:computed:TraceEngineResult:parse:Warnings:finalize",
        "duration": 1.49,
        "entryType": "measure"
      },
      {
        "startTime": 12984.25,
        "name": "lh:computed:TraceEngineResult:parse:handler.data()",
        "duration": 1.1,
        "entryType": "measure"
      },
      {
        "startTime": 12985.41,
        "name": "lh:computed:TraceEngineResult:insights",
        "duration": 487.21,
        "entryType": "measure"
      },
      {
        "startTime": 12986.05,
        "name": "lh:computed:TraceEngineResult:insights:CLSCulprits",
        "duration": 1.23,
        "entryType": "measure"
      },
      {
        "startTime": 12987.31,
        "name": "lh:computed:TraceEngineResult:insights:Cache",
        "duration": 0.49,
        "entryType": "measure"
      },
      {
        "startTime": 12987.83,
        "name": "lh:computed:TraceEngineResult:insights:DOMSize",
        "duration": 0.81,
        "entryType": "measure"
      },
      {
        "startTime": 12988.68,
        "name": "lh:computed:TraceEngineResult:insights:DocumentLatency",
        "duration": 0.4,
        "entryType": "measure"
      },
      {
        "startTime": 12989.11,
        "name": "lh:computed:TraceEngineResult:insights:DuplicatedJavaScript",
        "duration": 1.1,
        "entryType": "measure"
      },
      {
        "startTime": 12990.25,
        "name": "lh:computed:TraceEngineResult:insights:FontDisplay",
        "duration": 0.44,
        "entryType": "measure"
      },
      {
        "startTime": 12990.73,
        "name": "lh:computed:TraceEngineResult:insights:ForcedReflow",
        "duration": 0.51,
        "entryType": "measure"
      },
      {
        "startTime": 12991.28,
        "name": "lh:computed:TraceEngineResult:insights:INPBreakdown",
        "duration": 0.28,
        "entryType": "measure"
      },
      {
        "startTime": 12991.6,
        "name": "lh:computed:TraceEngineResult:insights:ImageDelivery",
        "duration": 0.59,
        "entryType": "measure"
      },
      {
        "startTime": 12992.22,
        "name": "lh:computed:TraceEngineResult:insights:LCPBreakdown",
        "duration": 0.29,
        "entryType": "measure"
      },
      {
        "startTime": 12992.53,
        "name": "lh:computed:TraceEngineResult:insights:LCPDiscovery",
        "duration": 0.33,
        "entryType": "measure"
      },
      {
        "startTime": 12992.91,
        "name": "lh:computed:TraceEngineResult:insights:LegacyJavaScript",
        "duration": 0.51,
        "entryType": "measure"
      },
      {
        "startTime": 12993.46,
        "name": "lh:computed:TraceEngineResult:insights:ModernHTTP",
        "duration": 0.64,
        "entryType": "measure"
      },
      {
        "startTime": 12994.14,
        "name": "lh:computed:TraceEngineResult:insights:NetworkDependencyTree",
        "duration": 0.24,
        "entryType": "measure"
      },
      {
        "startTime": 12994.41,
        "name": "lh:computed:TraceEngineResult:insights:RenderBlocking",
        "duration": 0.28,
        "entryType": "measure"
      },
      {
        "startTime": 12994.72,
        "name": "lh:computed:TraceEngineResult:insights:SlowCSSSelector",
        "duration": 0.4,
        "entryType": "measure"
      },
      {
        "startTime": 12995.16,
        "name": "lh:computed:TraceEngineResult:insights:ThirdParties",
        "duration": 0.26,
        "entryType": "measure"
      },
      {
        "startTime": 12995.44,
        "name": "lh:computed:TraceEngineResult:insights:Viewport",
        "duration": 0.57,
        "entryType": "measure"
      },
      {
        "startTime": 12996.28,
        "name": "lh:computed:TraceEngineResult:insights:createLanternContext",
        "duration": 126.64,
        "entryType": "measure"
      },
      {
        "startTime": 13123.06,
        "name": "lh:computed:TraceEngineResult:insights:CLSCulprits",
        "duration": 1.5,
        "entryType": "measure"
      },
      {
        "startTime": 13124.6,
        "name": "lh:computed:TraceEngineResult:insights:Cache",
        "duration": 6.65,
        "entryType": "measure"
      },
      {
        "startTime": 13131.29,
        "name": "lh:computed:TraceEngineResult:insights:DOMSize",
        "duration": 0.72,
        "entryType": "measure"
      },
      {
        "startTime": 13132.05,
        "name": "lh:computed:TraceEngineResult:insights:DocumentLatency",
        "duration": 0.77,
        "entryType": "measure"
      },
      {
        "startTime": 13132.84,
        "name": "lh:computed:TraceEngineResult:insights:DuplicatedJavaScript",
        "duration": 69.68,
        "entryType": "measure"
      },
      {
        "startTime": 13202.6,
        "name": "lh:computed:TraceEngineResult:insights:FontDisplay",
        "duration": 0.46,
        "entryType": "measure"
      },
      {
        "startTime": 13203.46,
        "name": "lh:computed:TraceEngineResult:insights:ForcedReflow",
        "duration": 0.12,
        "entryType": "measure"
      },
      {
        "startTime": 13203.62,
        "name": "lh:computed:TraceEngineResult:insights:INPBreakdown",
        "duration": 0.04,
        "entryType": "measure"
      },
      {
        "startTime": 13203.68,
        "name": "lh:computed:TraceEngineResult:insights:ImageDelivery",
        "duration": 7.65,
        "entryType": "measure"
      },
      {
        "startTime": 13211.4,
        "name": "lh:computed:TraceEngineResult:insights:LCPBreakdown",
        "duration": 0.79,
        "entryType": "measure"
      },
      {
        "startTime": 13212.23,
        "name": "lh:computed:TraceEngineResult:insights:LCPDiscovery",
        "duration": 0.29,
        "entryType": "measure"
      },
      {
        "startTime": 13212.54,
        "name": "lh:computed:TraceEngineResult:insights:LegacyJavaScript",
        "duration": 244.22,
        "entryType": "measure"
      },
      {
        "startTime": 13456.82,
        "name": "lh:computed:TraceEngineResult:insights:ModernHTTP",
        "duration": 5.53,
        "entryType": "measure"
      },
      {
        "startTime": 13462.41,
        "name": "lh:computed:TraceEngineResult:insights:NetworkDependencyTree",
        "duration": 6.09,
        "entryType": "measure"
      },
      {
        "startTime": 13468.56,
        "name": "lh:computed:TraceEngineResult:insights:RenderBlocking",
        "duration": 2.07,
        "entryType": "measure"
      },
      {
        "startTime": 13470.67,
        "name": "lh:computed:TraceEngineResult:insights:SlowCSSSelector",
        "duration": 0.05,
        "entryType": "measure"
      },
      {
        "startTime": 13470.73,
        "name": "lh:computed:TraceEngineResult:insights:ThirdParties",
        "duration": 0.13,
        "entryType": "measure"
      },
      {
        "startTime": 13470.88,
        "name": "lh:computed:TraceEngineResult:insights:Viewport",
        "duration": 0.35,
        "entryType": "measure"
      },
      {
        "startTime": 13492.57,
        "name": "lh:computed:CumulativeLayoutShift",
        "duration": 1.97,
        "entryType": "measure"
      },
      {
        "startTime": 13553.24,
        "name": "lh:gather:getArtifact:ViewportDimensions",
        "duration": 2.89,
        "entryType": "measure"
      },
      {
        "startTime": 13556.19,
        "name": "lh:gather:getArtifact:FullPageScreenshot",
        "duration": 1368.72,
        "entryType": "measure"
      },
      {
        "startTime": 14904.42,
        "name": "lh:gather:getVersion",
        "duration": 1.27,
        "entryType": "measure"
      },
      {
        "startTime": 14925.04,
        "name": "lh:gather:getArtifact:BFCacheFailures",
        "duration": 296.45,
        "entryType": "measure"
      },
      {
        "startTime": 15348.26,
        "name": "lh:runner:audit",
        "duration": 2080.27,
        "entryType": "measure"
      },
      {
        "startTime": 15348.47,
        "name": "lh:runner:auditing",
        "duration": 2079.1,
        "entryType": "measure"
      },
      {
        "startTime": 15349.97,
        "name": "lh:audit:is-on-https",
        "duration": 3.62,
        "entryType": "measure"
      },
      {
        "startTime": 15354.03,
        "name": "lh:audit:redirects-http",
        "duration": 1.34,
        "entryType": "measure"
      },
      {
        "startTime": 15355.75,
        "name": "lh:audit:first-contentful-paint",
        "duration": 41.34,
        "entryType": "measure"
      },
      {
        "startTime": 15356.44,
        "name": "lh:computed:FirstContentfulPaint",
        "duration": 37.34,
        "entryType": "measure"
      },
      {
        "startTime": 15356.71,
        "name": "lh:computed:ProcessedNavigation",
        "duration": 3.73,
        "entryType": "measure"
      },
      {
        "startTime": 15360.79,
        "name": "lh:computed:LanternFirstContentfulPaint",
        "duration": 32.92,
        "entryType": "measure"
      },
      {
        "startTime": 15361.1,
        "name": "lh:computed:PageDependencyGraph",
        "duration": 24.72,
        "entryType": "measure"
      },
      {
        "startTime": 15385.97,
        "name": "lh:computed:LoadSimulator",
        "duration": 2.64,
        "entryType": "measure"
      },
      {
        "startTime": 15386.24,
        "name": "lh:computed:NetworkAnalysis",
        "duration": 2.24,
        "entryType": "measure"
      },
      {
        "startTime": 15397.5,
        "name": "lh:audit:largest-contentful-paint",
        "duration": 8.93,
        "entryType": "measure"
      },
      {
        "startTime": 15398.14,
        "name": "lh:computed:LargestContentfulPaint",
        "duration": 6.96,
        "entryType": "measure"
      },
      {
        "startTime": 15398.33,
        "name": "lh:computed:LanternLargestContentfulPaint",
        "duration": 6.74,
        "entryType": "measure"
      },
      {
        "startTime": 15406.86,
        "name": "lh:audit:speed-index",
        "duration": 523.76,
        "entryType": "measure"
      },
      {
        "startTime": 15407.59,
        "name": "lh:computed:SpeedIndex",
        "duration": 521.61,
        "entryType": "measure"
      },
      {
        "startTime": 15407.73,
        "name": "lh:computed:LanternSpeedIndex",
        "duration": 521.42,
        "entryType": "measure"
      },
      {
        "startTime": 15407.81,
        "name": "lh:computed:Speedline",
        "duration": 490.36,
        "entryType": "measure"
      },
      {
        "startTime": 15930.74,
        "name": "lh:audit:screenshot-thumbnails",
        "duration": 0.92,
        "entryType": "measure"
      },
      {
        "startTime": 15931.76,
        "name": "lh:audit:final-screenshot",
        "duration": 5.28,
        "entryType": "measure"
      },
      {
        "startTime": 15932.04,
        "name": "lh:computed:Screenshots",
        "duration": 4.87,
        "entryType": "measure"
      },
      {
        "startTime": 15937.63,
        "name": "lh:audit:total-blocking-time",
        "duration": 40.5,
        "entryType": "measure"
      },
      {
        "startTime": 15938.34,
        "name": "lh:computed:TotalBlockingTime",
        "duration": 37.61,
        "entryType": "measure"
      },
      {
        "startTime": 15938.5,
        "name": "lh:computed:LanternTotalBlockingTime",
        "duration": 37.4,
        "entryType": "measure"
      },
      {
        "startTime": 15938.67,
        "name": "lh:computed:LanternInteractive",
        "duration": 14.59,
        "entryType": "measure"
      },
      {
        "startTime": 15978.84,
        "name": "lh:audit:max-potential-fid",
        "duration": 20.92,
        "entryType": "measure"
      },
      {
        "startTime": 15979.97,
        "name": "lh:computed:MaxPotentialFID",
        "duration": 15.38,
        "entryType": "measure"
      },
      {
        "startTime": 15980.45,
        "name": "lh:computed:LanternMaxPotentialFID",
        "duration": 14.85,
        "entryType": "measure"
      },
      {
        "startTime": 16000.17,
        "name": "lh:audit:cumulative-layout-shift",
        "duration": 1.46,
        "entryType": "measure"
      },
      {
        "startTime": 16002.08,
        "name": "lh:audit:errors-in-console",
        "duration": 63.25,
        "entryType": "measure"
      },
      {
        "startTime": 16002.81,
        "name": "lh:computed:JSBundles",
        "duration": 56.42,
        "entryType": "measure"
      },
      {
        "startTime": 16066.39,
        "name": "lh:audit:server-response-time",
        "duration": 3.5,
        "entryType": "measure"
      },
      {
        "startTime": 16067.44,
        "name": "lh:computed:NavigationInsights",
        "duration": 0.36,
        "entryType": "measure"
      },
      {
        "startTime": 16070.29,
        "name": "lh:audit:interactive",
        "duration": 2.31,
        "entryType": "measure"
      },
      {
        "startTime": 16071.2,
        "name": "lh:computed:Interactive",
        "duration": 0.24,
        "entryType": "measure"
      },
      {
        "startTime": 16072.94,
        "name": "lh:audit:user-timings",
        "duration": 6.25,
        "entryType": "measure"
      },
      {
        "startTime": 16073.43,
        "name": "lh:computed:UserTimings",
        "duration": 4.73,
        "entryType": "measure"
      },
      {
        "startTime": 16079.51,
        "name": "lh:audit:redirects",
        "duration": 8.52,
        "entryType": "measure"
      },
      {
        "startTime": 16088.48,
        "name": "lh:audit:image-aspect-ratio",
        "duration": 3.15,
        "entryType": "measure"
      },
      {
        "startTime": 16092.07,
        "name": "lh:audit:image-size-responsive",
        "duration": 4.35,
        "entryType": "measure"
      },
      {
        "startTime": 16092.72,
        "name": "lh:computed:ImageRecords",
        "duration": 1.09,
        "entryType": "measure"
      },
      {
        "startTime": 16096.8,
        "name": "lh:audit:deprecations",
        "duration": 1.49,
        "entryType": "measure"
      },
      {
        "startTime": 16098.71,
        "name": "lh:audit:third-party-cookies",
        "duration": 2.48,
        "entryType": "measure"
      },
      {
        "startTime": 16101.68,
        "name": "lh:audit:mainthread-work-breakdown",
        "duration": 76.16,
        "entryType": "measure"
      },
      {
        "startTime": 16102.64,
        "name": "lh:computed:MainThreadTasks",
        "duration": 70.95,
        "entryType": "measure"
      },
      {
        "startTime": 16178.36,
        "name": "lh:audit:bootup-time",
        "duration": 75.58,
        "entryType": "measure"
      },
      {
        "startTime": 16186.73,
        "name": "lh:computed:TBTImpactTasks",
        "duration": 56.51,
        "entryType": "measure"
      },
      {
        "startTime": 16254.01,
        "name": "lh:audit:diagnostics",
        "duration": 2.18,
        "entryType": "measure"
      },
      {
        "startTime": 16256.24,
        "name": "lh:audit:network-requests",
        "duration": 88.99,
        "entryType": "measure"
      },
      {
        "startTime": 16256.65,
        "name": "lh:computed:EntityClassification",
        "duration": 8.72,
        "entryType": "measure"
      },
      {
        "startTime": 16345.97,
        "name": "lh:audit:network-rtt",
        "duration": 2.53,
        "entryType": "measure"
      },
      {
        "startTime": 16349.06,
        "name": "lh:audit:network-server-latency",
        "duration": 2.51,
        "entryType": "measure"
      },
      {
        "startTime": 16351.63,
        "name": "lh:audit:main-thread-tasks",
        "duration": 1.15,
        "entryType": "measure"
      },
      {
        "startTime": 16352.82,
        "name": "lh:audit:metrics",
        "duration": 12.8,
        "entryType": "measure"
      },
      {
        "startTime": 16353.16,
        "name": "lh:computed:TimingSummary",
        "duration": 12,
        "entryType": "measure"
      },
      {
        "startTime": 16354.39,
        "name": "lh:computed:FirstContentfulPaintAllFrames",
        "duration": 0.31,
        "entryType": "measure"
      },
      {
        "startTime": 16354.83,
        "name": "lh:computed:LargestContentfulPaintAllFrames",
        "duration": 0.46,
        "entryType": "measure"
      },
      {
        "startTime": 16355.5,
        "name": "lh:computed:LCPBreakdown",
        "duration": 7.99,
        "entryType": "measure"
      },
      {
        "startTime": 16355.95,
        "name": "lh:computed:TimeToFirstByte",
        "duration": 0.75,
        "entryType": "measure"
      },
      {
        "startTime": 16356.75,
        "name": "lh:computed:LCPImageRecord",
        "duration": 6.5,
        "entryType": "measure"
      },
      {
        "startTime": 16365.68,
        "name": "lh:audit:resource-summary",
        "duration": 3.6,
        "entryType": "measure"
      },
      {
        "startTime": 16366.05,
        "name": "lh:computed:ResourceSummary",
        "duration": 1.75,
        "entryType": "measure"
      },
      {
        "startTime": 16369.89,
        "name": "lh:audit:layout-shifts",
        "duration": 6.08,
        "entryType": "measure"
      },
      {
        "startTime": 16376.58,
        "name": "lh:audit:long-tasks",
        "duration": 21.8,
        "entryType": "measure"
      },
      {
        "startTime": 16399.03,
        "name": "lh:audit:non-composited-animations",
        "duration": 2.43,
        "entryType": "measure"
      },
      {
        "startTime": 16402.46,
        "name": "lh:audit:unsized-images",
        "duration": 4.26,
        "entryType": "measure"
      },
      {
        "startTime": 16407.4,
        "name": "lh:audit:valid-source-maps",
        "duration": 10.07,
        "entryType": "measure"
      },
      {
        "startTime": 16418.16,
        "name": "lh:audit:csp-xss",
        "duration": 9.16,
        "entryType": "measure"
      },
      {
        "startTime": 16427.75,
        "name": "lh:audit:has-hsts",
        "duration": 4.42,
        "entryType": "measure"
      },
      {
        "startTime": 16432.83,
        "name": "lh:audit:origin-isolation",
        "duration": 3.44,
        "entryType": "measure"
      },
      {
        "startTime": 16436.74,
        "name": "lh:audit:clickjacking-mitigation",
        "duration": 2.99,
        "entryType": "measure"
      },
      {
        "startTime": 16440.3,
        "name": "lh:audit:trusted-types-xss",
        "duration": 2.85,
        "entryType": "measure"
      },
      {
        "startTime": 16443.22,
        "name": "lh:audit:script-treemap-data",
        "duration": 110.02,
        "entryType": "measure"
      },
      {
        "startTime": 16444,
        "name": "lh:computed:ModuleDuplication",
        "duration": 2.27,
        "entryType": "measure"
      },
      {
        "startTime": 16446.55,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 1.8,
        "entryType": "measure"
      },
      {
        "startTime": 16448.65,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.26,
        "entryType": "measure"
      },
      {
        "startTime": 16449,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.21,
        "entryType": "measure"
      },
      {
        "startTime": 16449.28,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 2.19,
        "entryType": "measure"
      },
      {
        "startTime": 16451.85,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.16,
        "entryType": "measure"
      },
      {
        "startTime": 16452.19,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 16452.57,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 1.09,
        "entryType": "measure"
      },
      {
        "startTime": 16453.78,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 47.78,
        "entryType": "measure"
      },
      {
        "startTime": 16505.42,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.28,
        "entryType": "measure"
      },
      {
        "startTime": 16505.99,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.26,
        "entryType": "measure"
      },
      {
        "startTime": 16506.52,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.26,
        "entryType": "measure"
      },
      {
        "startTime": 16506.94,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.81,
        "entryType": "measure"
      },
      {
        "startTime": 16508.04,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.33,
        "entryType": "measure"
      },
      {
        "startTime": 16508.5,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 6.31,
        "entryType": "measure"
      },
      {
        "startTime": 16515.39,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.18,
        "entryType": "measure"
      },
      {
        "startTime": 16515.72,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 4.36,
        "entryType": "measure"
      },
      {
        "startTime": 16520.27,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 16520.68,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.76,
        "entryType": "measure"
      },
      {
        "startTime": 16521.63,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.2,
        "entryType": "measure"
      },
      {
        "startTime": 16522.11,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.3,
        "entryType": "measure"
      },
      {
        "startTime": 16522.63,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.21,
        "entryType": "measure"
      },
      {
        "startTime": 16523.1,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.27,
        "entryType": "measure"
      },
      {
        "startTime": 16523.58,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.23,
        "entryType": "measure"
      },
      {
        "startTime": 16524.51,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.28,
        "entryType": "measure"
      },
      {
        "startTime": 16525.2,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.35,
        "entryType": "measure"
      },
      {
        "startTime": 16525.91,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.3,
        "entryType": "measure"
      },
      {
        "startTime": 16526.63,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.35,
        "entryType": "measure"
      },
      {
        "startTime": 16527.34,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.38,
        "entryType": "measure"
      },
      {
        "startTime": 16527.99,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.34,
        "entryType": "measure"
      },
      {
        "startTime": 16528.62,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.28,
        "entryType": "measure"
      },
      {
        "startTime": 16529.22,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.34,
        "entryType": "measure"
      },
      {
        "startTime": 16529.91,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.49,
        "entryType": "measure"
      },
      {
        "startTime": 16530.7,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.65,
        "entryType": "measure"
      },
      {
        "startTime": 16531.64,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.44,
        "entryType": "measure"
      },
      {
        "startTime": 16532.44,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 1.16,
        "entryType": "measure"
      },
      {
        "startTime": 16533.96,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.53,
        "entryType": "measure"
      },
      {
        "startTime": 16535.05,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.64,
        "entryType": "measure"
      },
      {
        "startTime": 16536.2,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.51,
        "entryType": "measure"
      },
      {
        "startTime": 16537.01,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.32,
        "entryType": "measure"
      },
      {
        "startTime": 16537.79,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.59,
        "entryType": "measure"
      },
      {
        "startTime": 16538.64,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.25,
        "entryType": "measure"
      },
      {
        "startTime": 16539.12,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.34,
        "entryType": "measure"
      },
      {
        "startTime": 16539.8,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.26,
        "entryType": "measure"
      },
      {
        "startTime": 16540.34,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.24,
        "entryType": "measure"
      },
      {
        "startTime": 16540.91,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.24,
        "entryType": "measure"
      },
      {
        "startTime": 16541.39,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.28,
        "entryType": "measure"
      },
      {
        "startTime": 16541.91,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.35,
        "entryType": "measure"
      },
      {
        "startTime": 16542.59,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.32,
        "entryType": "measure"
      },
      {
        "startTime": 16543.19,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.31,
        "entryType": "measure"
      },
      {
        "startTime": 16543.82,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.5,
        "entryType": "measure"
      },
      {
        "startTime": 16544.6,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.39,
        "entryType": "measure"
      },
      {
        "startTime": 16545.35,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.27,
        "entryType": "measure"
      },
      {
        "startTime": 16545.89,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.34,
        "entryType": "measure"
      },
      {
        "startTime": 16546.54,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.44,
        "entryType": "measure"
      },
      {
        "startTime": 16547.27,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.37,
        "entryType": "measure"
      },
      {
        "startTime": 16547.96,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.31,
        "entryType": "measure"
      },
      {
        "startTime": 16548.55,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.35,
        "entryType": "measure"
      },
      {
        "startTime": 16549.22,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.28,
        "entryType": "measure"
      },
      {
        "startTime": 16549.79,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.47,
        "entryType": "measure"
      },
      {
        "startTime": 16550.62,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.41,
        "entryType": "measure"
      },
      {
        "startTime": 16551.33,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.38,
        "entryType": "measure"
      },
      {
        "startTime": 16552.03,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.32,
        "entryType": "measure"
      },
      {
        "startTime": 16552.65,
        "name": "lh:computed:UnusedJavascriptSummary",
        "duration": 0.29,
        "entryType": "measure"
      },
      {
        "startTime": 16553.96,
        "name": "lh:audit:accesskeys",
        "duration": 2.28,
        "entryType": "measure"
      },
      {
        "startTime": 16556.75,
        "name": "lh:audit:aria-allowed-attr",
        "duration": 7.47,
        "entryType": "measure"
      },
      {
        "startTime": 16564.74,
        "name": "lh:audit:aria-allowed-role",
        "duration": 7.72,
        "entryType": "measure"
      },
      {
        "startTime": 16573.07,
        "name": "lh:audit:aria-command-name",
        "duration": 1.91,
        "entryType": "measure"
      },
      {
        "startTime": 16575.55,
        "name": "lh:audit:aria-conditional-attr",
        "duration": 8.17,
        "entryType": "measure"
      },
      {
        "startTime": 16584.32,
        "name": "lh:audit:aria-deprecated-role",
        "duration": 6.9,
        "entryType": "measure"
      },
      {
        "startTime": 16591.75,
        "name": "lh:audit:aria-dialog-name",
        "duration": 8.13,
        "entryType": "measure"
      },
      {
        "startTime": 16600.5,
        "name": "lh:audit:aria-hidden-body",
        "duration": 13.54,
        "entryType": "measure"
      },
      {
        "startTime": 16614.67,
        "name": "lh:audit:aria-hidden-focus",
        "duration": 1.91,
        "entryType": "measure"
      },
      {
        "startTime": 16617.13,
        "name": "lh:audit:aria-input-field-name",
        "duration": 2.02,
        "entryType": "measure"
      },
      {
        "startTime": 16619.68,
        "name": "lh:audit:aria-meter-name",
        "duration": 2.49,
        "entryType": "measure"
      },
      {
        "startTime": 16622.86,
        "name": "lh:audit:aria-progressbar-name",
        "duration": 2.48,
        "entryType": "measure"
      },
      {
        "startTime": 16625.85,
        "name": "lh:audit:aria-prohibited-attr",
        "duration": 6.76,
        "entryType": "measure"
      },
      {
        "startTime": 16633.09,
        "name": "lh:audit:aria-required-attr",
        "duration": 6.35,
        "entryType": "measure"
      },
      {
        "startTime": 16640,
        "name": "lh:audit:aria-required-children",
        "duration": 2.41,
        "entryType": "measure"
      },
      {
        "startTime": 16642.93,
        "name": "lh:audit:aria-required-parent",
        "duration": 2.37,
        "entryType": "measure"
      },
      {
        "startTime": 16645.77,
        "name": "lh:audit:aria-roles",
        "duration": 6.1,
        "entryType": "measure"
      },
      {
        "startTime": 16652.37,
        "name": "lh:audit:aria-text",
        "duration": 2.56,
        "entryType": "measure"
      },
      {
        "startTime": 16655.42,
        "name": "lh:audit:aria-toggle-field-name",
        "duration": 3.04,
        "entryType": "measure"
      },
      {
        "startTime": 16659,
        "name": "lh:audit:aria-tooltip-name",
        "duration": 3.04,
        "entryType": "measure"
      },
      {
        "startTime": 16662.64,
        "name": "lh:audit:aria-treeitem-name",
        "duration": 3.27,
        "entryType": "measure"
      },
      {
        "startTime": 16666.44,
        "name": "lh:audit:aria-valid-attr-value",
        "duration": 16.22,
        "entryType": "measure"
      },
      {
        "startTime": 16683.22,
        "name": "lh:audit:aria-valid-attr",
        "duration": 6.27,
        "entryType": "measure"
      },
      {
        "startTime": 16690.04,
        "name": "lh:audit:button-name",
        "duration": 7.04,
        "entryType": "measure"
      },
      {
        "startTime": 16697.67,
        "name": "lh:audit:bypass",
        "duration": 6.99,
        "entryType": "measure"
      },
      {
        "startTime": 16705.23,
        "name": "lh:audit:color-contrast",
        "duration": 6.55,
        "entryType": "measure"
      },
      {
        "startTime": 16712.48,
        "name": "lh:audit:definition-list",
        "duration": 3.75,
        "entryType": "measure"
      },
      {
        "startTime": 16716.79,
        "name": "lh:audit:dlitem",
        "duration": 3.53,
        "entryType": "measure"
      },
      {
        "startTime": 16720.82,
        "name": "lh:audit:document-title",
        "duration": 6.63,
        "entryType": "measure"
      },
      {
        "startTime": 16727.94,
        "name": "lh:audit:duplicate-id-aria",
        "duration": 3.07,
        "entryType": "measure"
      },
      {
        "startTime": 16731.53,
        "name": "lh:audit:empty-heading",
        "duration": 6.4,
        "entryType": "measure"
      },
      {
        "startTime": 16750.7,
        "name": "lh:audit:form-field-multiple-labels",
        "duration": 6.63,
        "entryType": "measure"
      },
      {
        "startTime": 16757.94,
        "name": "lh:audit:frame-title",
        "duration": 3.29,
        "entryType": "measure"
      },
      {
        "startTime": 16761.71,
        "name": "lh:audit:heading-order",
        "duration": 6.4,
        "entryType": "measure"
      },
      {
        "startTime": 16768.68,
        "name": "lh:audit:html-has-lang",
        "duration": 6.83,
        "entryType": "measure"
      },
      {
        "startTime": 16776.19,
        "name": "lh:audit:html-lang-valid",
        "duration": 6.6,
        "entryType": "measure"
      },
      {
        "startTime": 16783.36,
        "name": "lh:audit:html-xml-lang-mismatch",
        "duration": 3.78,
        "entryType": "measure"
      },
      {
        "startTime": 16787.66,
        "name": "lh:audit:identical-links-same-purpose",
        "duration": 6.45,
        "entryType": "measure"
      },
      {
        "startTime": 16794.59,
        "name": "lh:audit:image-alt",
        "duration": 5.62,
        "entryType": "measure"
      },
      {
        "startTime": 16800.68,
        "name": "lh:audit:image-redundant-alt",
        "duration": 16.4,
        "entryType": "measure"
      },
      {
        "startTime": 16817.63,
        "name": "lh:audit:input-button-name",
        "duration": 3.57,
        "entryType": "measure"
      },
      {
        "startTime": 16821.75,
        "name": "lh:audit:input-image-alt",
        "duration": 4.05,
        "entryType": "measure"
      },
      {
        "startTime": 16826.49,
        "name": "lh:audit:label-content-name-mismatch",
        "duration": 6.34,
        "entryType": "measure"
      },
      {
        "startTime": 16833.3,
        "name": "lh:audit:label",
        "duration": 6.25,
        "entryType": "measure"
      },
      {
        "startTime": 16840.03,
        "name": "lh:audit:landmark-one-main",
        "duration": 5.92,
        "entryType": "measure"
      },
      {
        "startTime": 16846.54,
        "name": "lh:audit:link-name",
        "duration": 6.75,
        "entryType": "measure"
      },
      {
        "startTime": 16854,
        "name": "lh:audit:link-in-text-block",
        "duration": 6.58,
        "entryType": "measure"
      },
      {
        "startTime": 16861.09,
        "name": "lh:audit:list",
        "duration": 5.67,
        "entryType": "measure"
      },
      {
        "startTime": 16867.25,
        "name": "lh:audit:listitem",
        "duration": 18.76,
        "entryType": "measure"
      },
      {
        "startTime": 16886.6,
        "name": "lh:audit:meta-refresh",
        "duration": 4.15,
        "entryType": "measure"
      },
      {
        "startTime": 16891.27,
        "name": "lh:audit:meta-viewport",
        "duration": 7.29,
        "entryType": "measure"
      },
      {
        "startTime": 16899.1,
        "name": "lh:audit:object-alt",
        "duration": 4.75,
        "entryType": "measure"
      },
      {
        "startTime": 16904.37,
        "name": "lh:audit:select-name",
        "duration": 4.83,
        "entryType": "measure"
      },
      {
        "startTime": 16909.83,
        "name": "lh:audit:skip-link",
        "duration": 14.36,
        "entryType": "measure"
      },
      {
        "startTime": 16925.08,
        "name": "lh:audit:tabindex",
        "duration": 13.86,
        "entryType": "measure"
      },
      {
        "startTime": 16940.5,
        "name": "lh:audit:table-duplicate-name",
        "duration": 7.9,
        "entryType": "measure"
      },
      {
        "startTime": 16949.58,
        "name": "lh:audit:table-fake-caption",
        "duration": 8.42,
        "entryType": "measure"
      },
      {
        "startTime": 16958.88,
        "name": "lh:audit:target-size",
        "duration": 23.01,
        "entryType": "measure"
      },
      {
        "startTime": 16982.75,
        "name": "lh:audit:td-has-header",
        "duration": 5.82,
        "entryType": "measure"
      },
      {
        "startTime": 16989.38,
        "name": "lh:audit:td-headers-attr",
        "duration": 17.79,
        "entryType": "measure"
      },
      {
        "startTime": 17007.7,
        "name": "lh:audit:th-has-data-cells",
        "duration": 7.99,
        "entryType": "measure"
      },
      {
        "startTime": 17016.09,
        "name": "lh:audit:valid-lang",
        "duration": 5.02,
        "entryType": "measure"
      },
      {
        "startTime": 17021.62,
        "name": "lh:audit:video-caption",
        "duration": 3.4,
        "entryType": "measure"
      },
      {
        "startTime": 17025.12,
        "name": "lh:audit:custom-controls-labels",
        "duration": 0.32,
        "entryType": "measure"
      },
      {
        "startTime": 17025.46,
        "name": "lh:audit:custom-controls-roles",
        "duration": 0.03,
        "entryType": "measure"
      },
      {
        "startTime": 17025.5,
        "name": "lh:audit:focus-traps",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 17025.53,
        "name": "lh:audit:focusable-controls",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 17025.56,
        "name": "lh:audit:interactive-element-affordance",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 17025.59,
        "name": "lh:audit:logical-tab-order",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 17025.61,
        "name": "lh:audit:managed-focus",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 17025.64,
        "name": "lh:audit:offscreen-content-hidden",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 17025.67,
        "name": "lh:audit:use-landmarks",
        "duration": 0.03,
        "entryType": "measure"
      },
      {
        "startTime": 17025.7,
        "name": "lh:audit:visual-order-follows-dom",
        "duration": 0.02,
        "entryType": "measure"
      },
      {
        "startTime": 17026.1,
        "name": "lh:audit:total-byte-weight",
        "duration": 3.98,
        "entryType": "measure"
      },
      {
        "startTime": 17030.47,
        "name": "lh:audit:unminified-css",
        "duration": 91.57,
        "entryType": "measure"
      },
      {
        "startTime": 17122.42,
        "name": "lh:audit:unminified-javascript",
        "duration": 157.94,
        "entryType": "measure"
      },
      {
        "startTime": 17280.68,
        "name": "lh:audit:unused-css-rules",
        "duration": 60.04,
        "entryType": "measure"
      },
      {
        "startTime": 17281.23,
        "name": "lh:computed:UnusedCSS",
        "duration": 54.43,
        "entryType": "measure"
      },
      {
        "startTime": 17341.04,
        "name": "lh:audit:unused-javascript",
        "duration": 12.85,
        "entryType": "measure"
      },
      {
        "startTime": 17354.42,
        "name": "lh:audit:doctype",
        "duration": 1.32,
        "entryType": "measure"
      },
      {
        "startTime": 17356.11,
        "name": "lh:audit:charset",
        "duration": 1.89,
        "entryType": "measure"
      },
      {
        "startTime": 17358.59,
        "name": "lh:audit:geolocation-on-start",
        "duration": 1.55,
        "entryType": "measure"
      },
      {
        "startTime": 17360.49,
        "name": "lh:audit:inspector-issues",
        "duration": 1.41,
        "entryType": "measure"
      },
      {
        "startTime": 17362.45,
        "name": "lh:audit:js-libraries",
        "duration": 1.83,
        "entryType": "measure"
      },
      {
        "startTime": 17364.85,
        "name": "lh:audit:notification-on-start",
        "duration": 2.04,
        "entryType": "measure"
      },
      {
        "startTime": 17367.46,
        "name": "lh:audit:paste-preventing-inputs",
        "duration": 1.93,
        "entryType": "measure"
      },
      {
        "startTime": 17369.95,
        "name": "lh:audit:meta-description",
        "duration": 1.79,
        "entryType": "measure"
      },
      {
        "startTime": 17372.1,
        "name": "lh:audit:http-status-code",
        "duration": 1.1,
        "entryType": "measure"
      },
      {
        "startTime": 17373.54,
        "name": "lh:audit:link-text",
        "duration": 2.58,
        "entryType": "measure"
      },
      {
        "startTime": 17376.46,
        "name": "lh:audit:crawlable-anchors",
        "duration": 2.2,
        "entryType": "measure"
      },
      {
        "startTime": 17379.04,
        "name": "lh:audit:is-crawlable",
        "duration": 5.28,
        "entryType": "measure"
      },
      {
        "startTime": 17384.69,
        "name": "lh:audit:robots-txt",
        "duration": 2.1,
        "entryType": "measure"
      },
      {
        "startTime": 17387.17,
        "name": "lh:audit:hreflang",
        "duration": 1.28,
        "entryType": "measure"
      },
      {
        "startTime": 17388.79,
        "name": "lh:audit:canonical",
        "duration": 1.47,
        "entryType": "measure"
      },
      {
        "startTime": 17390.59,
        "name": "lh:audit:structured-data",
        "duration": 0.64,
        "entryType": "measure"
      },
      {
        "startTime": 17391.57,
        "name": "lh:audit:bf-cache",
        "duration": 1.2,
        "entryType": "measure"
      },
      {
        "startTime": 17393.12,
        "name": "lh:audit:cache-insight",
        "duration": 2.58,
        "entryType": "measure"
      },
      {
        "startTime": 17396.04,
        "name": "lh:audit:cls-culprits-insight",
        "duration": 2.72,
        "entryType": "measure"
      },
      {
        "startTime": 17399.11,
        "name": "lh:audit:document-latency-insight",
        "duration": 1.63,
        "entryType": "measure"
      },
      {
        "startTime": 17401.08,
        "name": "lh:audit:dom-size-insight",
        "duration": 1.66,
        "entryType": "measure"
      },
      {
        "startTime": 17403.08,
        "name": "lh:audit:duplicated-javascript-insight",
        "duration": 1.35,
        "entryType": "measure"
      },
      {
        "startTime": 17404.76,
        "name": "lh:audit:font-display-insight",
        "duration": 1.25,
        "entryType": "measure"
      },
      {
        "startTime": 17406.42,
        "name": "lh:audit:forced-reflow-insight",
        "duration": 1.28,
        "entryType": "measure"
      },
      {
        "startTime": 17408.03,
        "name": "lh:audit:image-delivery-insight",
        "duration": 2.73,
        "entryType": "measure"
      },
      {
        "startTime": 17411.08,
        "name": "lh:audit:inp-breakdown-insight",
        "duration": 1.33,
        "entryType": "measure"
      },
      {
        "startTime": 17412.72,
        "name": "lh:audit:lcp-breakdown-insight",
        "duration": 1.65,
        "entryType": "measure"
      },
      {
        "startTime": 17414.78,
        "name": "lh:audit:lcp-discovery-insight",
        "duration": 1.27,
        "entryType": "measure"
      },
      {
        "startTime": 17416.42,
        "name": "lh:audit:legacy-javascript-insight",
        "duration": 1.36,
        "entryType": "measure"
      },
      {
        "startTime": 17418.11,
        "name": "lh:audit:modern-http-insight",
        "duration": 1.25,
        "entryType": "measure"
      },
      {
        "startTime": 17419.69,
        "name": "lh:audit:network-dependency-tree-insight",
        "duration": 2.36,
        "entryType": "measure"
      },
      {
        "startTime": 17422.44,
        "name": "lh:audit:render-blocking-insight",
        "duration": 1.87,
        "entryType": "measure"
      },
      {
        "startTime": 17424.63,
        "name": "lh:audit:third-parties-insight",
        "duration": 1.2,
        "entryType": "measure"
      },
      {
        "startTime": 17426.16,
        "name": "lh:audit:viewport-insight",
        "duration": 1.37,
        "entryType": "measure"
      },
      {
        "startTime": 17427.58,
        "name": "lh:runner:generate",
        "duration": 0.92,
        "entryType": "measure"
      }
    ],
    "total": 14284.66
  },
  "i18n": {
    "rendererFormattedStrings": {
      "calculatorLink": "See calculator.",
      "collapseView": "Collapse view",
      "crcInitialNavigation": "Initial Navigation",
      "crcLongestDurationLabel": "Maximum critical path latency:",
      "dropdownCopyJSON": "Copy JSON",
      "dropdownDarkTheme": "Toggle Dark Theme",
      "dropdownPrintExpanded": "Print Expanded",
      "dropdownPrintSummary": "Print Summary",
      "dropdownSaveGist": "Save as Gist",
      "dropdownSaveHTML": "Save as HTML",
      "dropdownSaveJSON": "Save as JSON",
      "dropdownViewUnthrottledTrace": "View Unthrottled Trace",
      "dropdownViewer": "Open in Viewer",
      "errorLabel": "Error!",
      "errorMissingAuditInfo": "Report error: no audit information",
      "expandView": "Expand view",
      "firstPartyChipLabel": "1st party",
      "footerIssue": "File an issue",
      "hide": "Hide",
      "labDataTitle": "Lab Data",
      "lsPerformanceCategoryDescription": "[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.",
      "manualAuditsGroupTitle": "Additional items to manually check",
      "notApplicableAuditsGroupTitle": "Not applicable",
      "openInANewTabTooltip": "Open in a new tab",
      "opportunityResourceColumnLabel": "Opportunity",
      "opportunitySavingsColumnLabel": "Estimated Savings",
      "passedAuditsGroupTitle": "Passed audits",
      "runtimeAnalysisWindow": "Initial page load",
      "runtimeAnalysisWindowSnapshot": "Point-in-time snapshot",
      "runtimeAnalysisWindowTimespan": "User interactions timespan",
      "runtimeCustom": "Custom throttling",
      "runtimeDesktopEmulation": "Emulated Desktop",
      "runtimeMobileEmulation": "Emulated Moto G Power",
      "runtimeNoEmulation": "No emulation",
      "runtimeSettingsAxeVersion": "Axe version",
      "runtimeSettingsBenchmark": "Unthrottled CPU/Memory Power",
      "runtimeSettingsCPUThrottling": "CPU throttling",
      "runtimeSettingsDevice": "Device",
      "runtimeSettingsNetworkThrottling": "Network throttling",
      "runtimeSettingsScreenEmulation": "Screen emulation",
      "runtimeSettingsUANetwork": "User agent (network)",
      "runtimeSingleLoad": "Single page session",
      "runtimeSingleLoadTooltip": "This data is taken from a single page session, as opposed to field data summarizing many sessions.",
      "runtimeSlow4g": "Slow 4G throttling",
      "runtimeUnknown": "Unknown",
      "show": "Show",
      "showRelevantAudits": "Show audits relevant to:",
      "snippetCollapseButtonLabel": "Collapse snippet",
      "snippetExpandButtonLabel": "Expand snippet",
      "thirdPartyResourcesLabel": "Show 3rd-party resources",
      "throttlingProvided": "Provided by environment",
      "toplevelWarningsMessage": "There were issues affecting this run of Lighthouse:",
      "unattributable": "Unattributable",
      "unscoredLabel": "Unscored",
      "unscoredTitle": "This audit does not contribute to the overall category score.",
      "varianceDisclaimer": "Values are estimated and may vary. The [performance score is calculated](https://developer.chrome.com/docs/lighthouse/performance/performance-scoring/) directly from these metrics.",
      "viewTraceLabel": "View Trace",
      "viewTreemapLabel": "View Treemap",
      "warningAuditsGroupTitle": "Passed audits but with warnings",
      "warningHeader": "Warnings: "
    },
    "icuMessagePaths": {
      "core/gather/driver/navigation.js | warningRedirected": [
        {
          "values": {
            "requested": "https://desmoinesregister.com/",
            "final": "https://eu.desmoinesregister.com/"
          },
          "path": "runWarnings[0]"
        }
      ],
      "core/audits/is-on-https.js | title": [
        "audits[is-on-https].title"
      ],
      "core/audits/is-on-https.js | description": [
        "audits[is-on-https].description"
      ],
      "core/audits/is-on-https.js | columnInsecureURL": [
        "audits[is-on-https].details.headings[0].label"
      ],
      "core/audits/is-on-https.js | columnResolution": [
        "audits[is-on-https].details.headings[1].label"
      ],
      "core/audits/redirects-http.js | title": [
        "audits[redirects-http].title"
      ],
      "core/audits/redirects-http.js | description": [
        "audits[redirects-http].description"
      ],
      "core/lib/i18n/i18n.js | firstContentfulPaintMetric": [
        "audits[first-contentful-paint].title"
      ],
      "core/audits/metrics/first-contentful-paint.js | description": [
        "audits[first-contentful-paint].description"
      ],
      "core/lib/i18n/i18n.js | seconds": [
        {
          "values": {
            "timeInMs": 4320.988629999999
          },
          "path": "audits[first-contentful-paint].displayValue"
        },
        {
          "values": {
            "timeInMs": 6469.622129999999
          },
          "path": "audits[largest-contentful-paint].displayValue"
        },
        {
          "values": {
            "timeInMs": 5198.262847191201
          },
          "path": "audits[speed-index].displayValue"
        },
        {
          "values": {
            "timeInMs": 10162.260096088867
          },
          "path": "audits.interactive.displayValue"
        },
        {
          "values": {
            "timeInMs": 5410.691999999973
          },
          "path": "audits[mainthread-work-breakdown].displayValue"
        },
        {
          "values": {
            "timeInMs": 2411.503999999984
          },
          "path": "audits[bootup-time].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | largestContentfulPaintMetric": [
        "audits[largest-contentful-paint].title"
      ],
      "core/audits/metrics/largest-contentful-paint.js | description": [
        "audits[largest-contentful-paint].description"
      ],
      "core/lib/i18n/i18n.js | speedIndexMetric": [
        "audits[speed-index].title"
      ],
      "core/audits/metrics/speed-index.js | description": [
        "audits[speed-index].description"
      ],
      "core/lib/i18n/i18n.js | totalBlockingTimeMetric": [
        "audits[total-blocking-time].title"
      ],
      "core/audits/metrics/total-blocking-time.js | description": [
        "audits[total-blocking-time].description"
      ],
      "core/lib/i18n/i18n.js | ms": [
        {
          "values": {
            "timeInMs": 763.5463080444333
          },
          "path": "audits[total-blocking-time].displayValue"
        },
        {
          "values": {
            "timeInMs": 662
          },
          "path": "audits[max-potential-fid].displayValue"
        },
        {
          "values": {
            "timeInMs": 12.585209999999995
          },
          "path": "audits[network-rtt].displayValue"
        },
        {
          "values": {
            "timeInMs": 384.88079
          },
          "path": "audits[network-server-latency].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | maxPotentialFIDMetric": [
        "audits[max-potential-fid].title"
      ],
      "core/audits/metrics/max-potential-fid.js | description": [
        "audits[max-potential-fid].description"
      ],
      "core/lib/i18n/i18n.js | cumulativeLayoutShiftMetric": [
        "audits[cumulative-layout-shift].title"
      ],
      "core/audits/metrics/cumulative-layout-shift.js | description": [
        "audits[cumulative-layout-shift].description"
      ],
      "core/audits/errors-in-console.js | failureTitle": [
        "audits[errors-in-console].title"
      ],
      "core/audits/errors-in-console.js | description": [
        "audits[errors-in-console].description"
      ],
      "core/lib/i18n/i18n.js | columnSource": [
        "audits[errors-in-console].details.headings[0].label",
        "audits.deprecations.details.headings[1].label",
        "audits[geolocation-on-start].details.headings[0].label",
        "audits[notification-on-start].details.headings[0].label",
        "audits[forced-reflow-insight].details.items[0].headings[0].label"
      ],
      "core/lib/i18n/i18n.js | columnDescription": [
        "audits[errors-in-console].details.headings[1].label",
        "audits[csp-xss].details.headings[0].label",
        "audits[has-hsts].details.headings[0].label",
        "audits[origin-isolation].details.headings[0].label",
        "audits[clickjacking-mitigation].details.headings[0].label",
        "audits[trusted-types-xss].details.headings[0].label"
      ],
      "core/audits/server-response-time.js | title": [
        "audits[server-response-time].title"
      ],
      "core/audits/server-response-time.js | description": [
        "audits[server-response-time].description"
      ],
      "core/audits/server-response-time.js | displayValue": [
        {
          "values": {
            "timeInMs": 397
          },
          "path": "audits[server-response-time].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | columnURL": [
        "audits[server-response-time].details.headings[0].label",
        "audits.redirects.details.headings[0].label",
        "audits[image-aspect-ratio].details.headings[1].label",
        "audits[image-size-responsive].details.headings[1].label",
        "audits[third-party-cookies].details.headings[1].label",
        "audits[bootup-time].details.headings[0].label",
        "audits[network-rtt].details.headings[0].label",
        "audits[network-server-latency].details.headings[0].label",
        "audits[long-tasks].details.headings[0].label",
        "audits[unsized-images].details.headings[1].label",
        "audits[valid-source-maps].details.headings[0].label",
        "audits[total-byte-weight].details.headings[0].label",
        "audits[unminified-javascript].details.headings[0].label",
        "audits[unused-javascript].details.headings[0].label",
        "audits[font-display-insight].details.headings[0].label",
        "audits[image-delivery-insight].details.headings[1].label",
        "audits[modern-http-insight].details.headings[0].label",
        "audits[render-blocking-insight].details.headings[0].label"
      ],
      "core/lib/i18n/i18n.js | columnTimeSpent": [
        "audits[server-response-time].details.headings[1].label",
        "audits.redirects.details.headings[1].label",
        "audits[mainthread-work-breakdown].details.headings[1].label",
        "audits[network-rtt].details.headings[1].label",
        "audits[network-server-latency].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | interactiveMetric": [
        "audits.interactive.title"
      ],
      "core/audits/metrics/interactive.js | description": [
        "audits.interactive.description"
      ],
      "core/audits/user-timings.js | title": [
        "audits[user-timings].title"
      ],
      "core/audits/user-timings.js | description": [
        "audits[user-timings].description"
      ],
      "core/lib/i18n/i18n.js | columnName": [
        "audits[user-timings].details.headings[0].label",
        "audits[third-party-cookies].details.headings[0].label",
        "audits[js-libraries].details.headings[0].label"
      ],
      "core/audits/user-timings.js | columnType": [
        "audits[user-timings].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | columnStartTime": [
        "audits[user-timings].details.headings[2].label",
        "audits[long-tasks].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | columnDuration": [
        "audits[user-timings].details.headings[3].label",
        "audits[long-tasks].details.headings[2].label",
        "audits[lcp-breakdown-insight].details.items[0].headings[1].label",
        "audits[render-blocking-insight].details.headings[2].label"
      ],
      "core/audits/redirects.js | title": [
        "audits.redirects.title"
      ],
      "core/audits/redirects.js | description": [
        "audits.redirects.description"
      ],
      "core/lib/i18n/i18n.js | displayValueMsSavings": [
        {
          "values": {
            "wastedMs": 1526.9509999999996
          },
          "path": "audits.redirects.displayValue"
        },
        {
          "values": {
            "wastedMs": 66
          },
          "path": "audits[document-latency-insight].displayValue"
        },
        {
          "values": {
            "wastedMs": 150
          },
          "path": "audits[render-blocking-insight].displayValue"
        }
      ],
      "core/audits/image-aspect-ratio.js | title": [
        "audits[image-aspect-ratio].title"
      ],
      "core/audits/image-aspect-ratio.js | description": [
        "audits[image-aspect-ratio].description"
      ],
      "core/audits/image-aspect-ratio.js | columnDisplayed": [
        "audits[image-aspect-ratio].details.headings[2].label"
      ],
      "core/audits/image-aspect-ratio.js | columnActual": [
        "audits[image-aspect-ratio].details.headings[3].label"
      ],
      "core/audits/image-size-responsive.js | failureTitle": [
        "audits[image-size-responsive].title"
      ],
      "core/audits/image-size-responsive.js | description": [
        "audits[image-size-responsive].description"
      ],
      "core/audits/image-size-responsive.js | columnDisplayed": [
        "audits[image-size-responsive].details.headings[2].label"
      ],
      "core/audits/image-size-responsive.js | columnActual": [
        "audits[image-size-responsive].details.headings[3].label"
      ],
      "core/audits/image-size-responsive.js | columnExpected": [
        "audits[image-size-responsive].details.headings[4].label"
      ],
      "core/audits/deprecations.js | title": [
        "audits.deprecations.title"
      ],
      "core/audits/deprecations.js | description": [
        "audits.deprecations.description"
      ],
      "core/audits/deprecations.js | columnDeprecate": [
        "audits.deprecations.details.headings[0].label"
      ],
      "core/audits/third-party-cookies.js | title": [
        "audits[third-party-cookies].title"
      ],
      "core/audits/third-party-cookies.js | description": [
        "audits[third-party-cookies].description"
      ],
      "core/audits/mainthread-work-breakdown.js | failureTitle": [
        "audits[mainthread-work-breakdown].title"
      ],
      "core/audits/mainthread-work-breakdown.js | description": [
        "audits[mainthread-work-breakdown].description"
      ],
      "core/audits/mainthread-work-breakdown.js | columnCategory": [
        "audits[mainthread-work-breakdown].details.headings[0].label"
      ],
      "core/audits/bootup-time.js | failureTitle": [
        "audits[bootup-time].title"
      ],
      "core/audits/bootup-time.js | description": [
        "audits[bootup-time].description"
      ],
      "core/audits/bootup-time.js | columnTotal": [
        "audits[bootup-time].details.headings[1].label"
      ],
      "core/audits/bootup-time.js | columnScriptEval": [
        "audits[bootup-time].details.headings[2].label"
      ],
      "core/audits/bootup-time.js | columnScriptParse": [
        "audits[bootup-time].details.headings[3].label"
      ],
      "core/audits/network-rtt.js | title": [
        "audits[network-rtt].title"
      ],
      "core/audits/network-rtt.js | description": [
        "audits[network-rtt].description"
      ],
      "core/audits/network-server-latency.js | title": [
        "audits[network-server-latency].title"
      ],
      "core/audits/network-server-latency.js | description": [
        "audits[network-server-latency].description"
      ],
      "core/lib/i18n/i18n.js | columnResourceType": [
        "audits[resource-summary].details.headings[0].label"
      ],
      "core/lib/i18n/i18n.js | columnRequests": [
        "audits[resource-summary].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | columnTransferSize": [
        "audits[resource-summary].details.headings[2].label",
        "audits[total-byte-weight].details.headings[1].label",
        "audits[unminified-javascript].details.headings[1].label",
        "audits[unused-javascript].details.headings[1].label",
        "audits[cache-insight].details.headings[2].label",
        "audits[render-blocking-insight].details.headings[1].label"
      ],
      "core/lib/i18n/i18n.js | total": [
        "audits[resource-summary].details.items[0].label",
        "audits[cls-culprits-insight].details.items[0].items[0].node.value"
      ],
      "core/lib/i18n/i18n.js | imageResourceType": [
        "audits[resource-summary].details.items[1].label"
      ],
      "core/lib/i18n/i18n.js | otherResourceType": [
        "audits[resource-summary].details.items[2].label"
      ],
      "core/lib/i18n/i18n.js | scriptResourceType": [
        "audits[resource-summary].details.items[3].label"
      ],
      "core/lib/i18n/i18n.js | fontResourceType": [
        "audits[resource-summary].details.items[4].label"
      ],
      "core/lib/i18n/i18n.js | documentResourceType": [
        "audits[resource-summary].details.items[5].label"
      ],
      "core/lib/i18n/i18n.js | stylesheetResourceType": [
        "audits[resource-summary].details.items[6].label"
      ],
      "core/lib/i18n/i18n.js | mediaResourceType": [
        "audits[resource-summary].details.items[7].label"
      ],
      "core/lib/i18n/i18n.js | thirdPartyResourceType": [
        "audits[resource-summary].details.items[8].label"
      ],
      "core/audits/layout-shifts.js | title": [
        "audits[layout-shifts].title"
      ],
      "core/audits/layout-shifts.js | description": [
        "audits[layout-shifts].description"
      ],
      "core/audits/layout-shifts.js | displayValueShiftsFound": [
        {
          "values": {
            "shiftCount": 3
          },
          "path": "audits[layout-shifts].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | columnElement": [
        "audits[layout-shifts].details.headings[0].label",
        "audits[non-composited-animations].details.headings[0].label",
        "audits[cls-culprits-insight].details.items[0].headings[0].label",
        "audits[dom-size-insight].details.headings[1].label"
      ],
      "core/audits/layout-shifts.js | columnScore": [
        "audits[layout-shifts].details.headings[1].label"
      ],
      "core/audits/layout-shifts.js | rootCauseUnsizedMedia": [
        "audits[layout-shifts].details.items[0].subItems.items[0].cause",
        "audits[layout-shifts].details.items[2].subItems.items[0].cause"
      ],
      "core/audits/long-tasks.js | title": [
        "audits[long-tasks].title"
      ],
      "core/audits/long-tasks.js | description": [
        "audits[long-tasks].description"
      ],
      "core/audits/long-tasks.js | displayValue": [
        {
          "values": {
            "itemCount": 17
          },
          "path": "audits[long-tasks].displayValue"
        }
      ],
      "core/audits/non-composited-animations.js | title": [
        "audits[non-composited-animations].title"
      ],
      "core/audits/non-composited-animations.js | description": [
        "audits[non-composited-animations].description"
      ],
      "core/audits/unsized-images.js | failureTitle": [
        "audits[unsized-images].title"
      ],
      "core/audits/unsized-images.js | description": [
        "audits[unsized-images].description"
      ],
      "core/audits/valid-source-maps.js | title": [
        "audits[valid-source-maps].title"
      ],
      "core/audits/valid-source-maps.js | description": [
        "audits[valid-source-maps].description"
      ],
      "core/audits/valid-source-maps.js | columnMapURL": [
        "audits[valid-source-maps].details.headings[1].label"
      ],
      "core/audits/csp-xss.js | title": [
        "audits[csp-xss].title"
      ],
      "core/audits/csp-xss.js | description": [
        "audits[csp-xss].description"
      ],
      "core/audits/csp-xss.js | columnDirective": [
        "audits[csp-xss].details.headings[1].label"
      ],
      "core/audits/csp-xss.js | columnSeverity": [
        "audits[csp-xss].details.headings[2].label"
      ],
      "core/lib/csp-evaluator.js | missingScriptSrc": [
        "audits[csp-xss].details.items[0].description"
      ],
      "core/lib/i18n/i18n.js | itemSeverityHigh": [
        "audits[csp-xss].details.items[0].severity",
        "audits[csp-xss].details.items[1].severity",
        "audits[has-hsts].details.items[0].severity",
        "audits[origin-isolation].details.items[0].severity",
        "audits[clickjacking-mitigation].details.items[0].severity",
        "audits[trusted-types-xss].details.items[0].severity"
      ],
      "core/lib/csp-evaluator.js | missingObjectSrc": [
        "audits[csp-xss].details.items[1].description"
      ],
      "core/audits/has-hsts.js | title": [
        "audits[has-hsts].title"
      ],
      "core/audits/has-hsts.js | description": [
        "audits[has-hsts].description"
      ],
      "core/audits/has-hsts.js | columnDirective": [
        "audits[has-hsts].details.headings[1].label"
      ],
      "core/audits/has-hsts.js | columnSeverity": [
        "audits[has-hsts].details.headings[2].label"
      ],
      "core/audits/has-hsts.js | lowMaxAge": [
        "audits[has-hsts].details.items[0].description"
      ],
      "core/audits/has-hsts.js | noSubdomain": [
        "audits[has-hsts].details.items[1].description"
      ],
      "core/lib/i18n/i18n.js | itemSeverityMedium": [
        "audits[has-hsts].details.items[1].severity",
        "audits[has-hsts].details.items[2].severity"
      ],
      "core/audits/has-hsts.js | noPreload": [
        "audits[has-hsts].details.items[2].description"
      ],
      "core/audits/origin-isolation.js | title": [
        "audits[origin-isolation].title"
      ],
      "core/audits/origin-isolation.js | description": [
        "audits[origin-isolation].description"
      ],
      "core/audits/origin-isolation.js | columnDirective": [
        "audits[origin-isolation].details.headings[1].label"
      ],
      "core/audits/origin-isolation.js | columnSeverity": [
        "audits[origin-isolation].details.headings[2].label"
      ],
      "core/audits/origin-isolation.js | noCoop": [
        "audits[origin-isolation].details.items[0].description"
      ],
      "core/audits/clickjacking-mitigation.js | title": [
        "audits[clickjacking-mitigation].title"
      ],
      "core/audits/clickjacking-mitigation.js | description": [
        "audits[clickjacking-mitigation].description"
      ],
      "core/audits/clickjacking-mitigation.js | columnSeverity": [
        "audits[clickjacking-mitigation].details.headings[1].label"
      ],
      "core/audits/clickjacking-mitigation.js | noClickjackingMitigation": [
        "audits[clickjacking-mitigation].details.items[0].description"
      ],
      "core/audits/trusted-types-xss.js | title": [
        "audits[trusted-types-xss].title"
      ],
      "core/audits/trusted-types-xss.js | description": [
        "audits[trusted-types-xss].description"
      ],
      "core/audits/trusted-types-xss.js | columnSeverity": [
        "audits[trusted-types-xss].details.headings[1].label"
      ],
      "core/audits/trusted-types-xss.js | noTrustedTypesToMitigateXss": [
        "audits[trusted-types-xss].details.items[0].description"
      ],
      "core/audits/accessibility/accesskeys.js | title": [
        "audits.accesskeys.title"
      ],
      "core/audits/accessibility/accesskeys.js | description": [
        "audits.accesskeys.description"
      ],
      "core/audits/accessibility/aria-allowed-attr.js | title": [
        "audits[aria-allowed-attr].title"
      ],
      "core/audits/accessibility/aria-allowed-attr.js | description": [
        "audits[aria-allowed-attr].description"
      ],
      "core/lib/i18n/i18n.js | columnFailingElem": [
        "audits[aria-allowed-attr].details.headings[0].label",
        "audits[aria-conditional-attr].details.headings[0].label",
        "audits[aria-deprecated-role].details.headings[0].label",
        "audits[aria-dialog-name].details.headings[0].label",
        "audits[aria-hidden-body].details.headings[0].label",
        "audits[aria-prohibited-attr].details.headings[0].label",
        "audits[aria-required-attr].details.headings[0].label",
        "audits[aria-roles].details.headings[0].label",
        "audits[aria-valid-attr-value].details.headings[0].label",
        "audits[aria-valid-attr].details.headings[0].label",
        "audits[button-name].details.headings[0].label",
        "audits[color-contrast].details.headings[0].label",
        "audits[document-title].details.headings[0].label",
        "audits[heading-order].details.headings[0].label",
        "audits[html-has-lang].details.headings[0].label",
        "audits[html-lang-valid].details.headings[0].label",
        "audits[image-alt].details.headings[0].label",
        "audits[label-content-name-mismatch].details.headings[0].label",
        "audits.label.details.headings[0].label",
        "audits[landmark-one-main].details.headings[0].label",
        "audits[link-name].details.headings[0].label",
        "audits[link-in-text-block].details.headings[0].label",
        "audits.list.details.headings[0].label",
        "audits.listitem.details.headings[0].label",
        "audits[meta-viewport].details.headings[0].label",
        "audits[skip-link].details.headings[0].label",
        "audits.tabindex.details.headings[0].label",
        "audits[target-size].details.headings[0].label",
        "audits[paste-preventing-inputs].details.headings[0].label"
      ],
      "core/audits/accessibility/aria-allowed-role.js | title": [
        "audits[aria-allowed-role].title"
      ],
      "core/audits/accessibility/aria-allowed-role.js | description": [
        "audits[aria-allowed-role].description"
      ],
      "core/audits/accessibility/aria-command-name.js | title": [
        "audits[aria-command-name].title"
      ],
      "core/audits/accessibility/aria-command-name.js | description": [
        "audits[aria-command-name].description"
      ],
      "core/audits/accessibility/aria-conditional-attr.js | title": [
        "audits[aria-conditional-attr].title"
      ],
      "core/audits/accessibility/aria-conditional-attr.js | description": [
        "audits[aria-conditional-attr].description"
      ],
      "core/audits/accessibility/aria-deprecated-role.js | title": [
        "audits[aria-deprecated-role].title"
      ],
      "core/audits/accessibility/aria-deprecated-role.js | description": [
        "audits[aria-deprecated-role].description"
      ],
      "core/audits/accessibility/aria-dialog-name.js | title": [
        "audits[aria-dialog-name].title"
      ],
      "core/audits/accessibility/aria-dialog-name.js | description": [
        "audits[aria-dialog-name].description"
      ],
      "core/audits/accessibility/aria-hidden-body.js | title": [
        "audits[aria-hidden-body].title"
      ],
      "core/audits/accessibility/aria-hidden-body.js | description": [
        "audits[aria-hidden-body].description"
      ],
      "core/audits/accessibility/aria-hidden-focus.js | title": [
        "audits[aria-hidden-focus].title"
      ],
      "core/audits/accessibility/aria-hidden-focus.js | description": [
        "audits[aria-hidden-focus].description"
      ],
      "core/audits/accessibility/aria-input-field-name.js | title": [
        "audits[aria-input-field-name].title"
      ],
      "core/audits/accessibility/aria-input-field-name.js | description": [
        "audits[aria-input-field-name].description"
      ],
      "core/audits/accessibility/aria-meter-name.js | title": [
        "audits[aria-meter-name].title"
      ],
      "core/audits/accessibility/aria-meter-name.js | description": [
        "audits[aria-meter-name].description"
      ],
      "core/audits/accessibility/aria-progressbar-name.js | title": [
        "audits[aria-progressbar-name].title"
      ],
      "core/audits/accessibility/aria-progressbar-name.js | description": [
        "audits[aria-progressbar-name].description"
      ],
      "core/audits/accessibility/aria-prohibited-attr.js | title": [
        "audits[aria-prohibited-attr].title"
      ],
      "core/audits/accessibility/aria-prohibited-attr.js | description": [
        "audits[aria-prohibited-attr].description"
      ],
      "core/audits/accessibility/aria-required-attr.js | title": [
        "audits[aria-required-attr].title"
      ],
      "core/audits/accessibility/aria-required-attr.js | description": [
        "audits[aria-required-attr].description"
      ],
      "core/audits/accessibility/aria-required-children.js | title": [
        "audits[aria-required-children].title"
      ],
      "core/audits/accessibility/aria-required-children.js | description": [
        "audits[aria-required-children].description"
      ],
      "core/audits/accessibility/aria-required-parent.js | title": [
        "audits[aria-required-parent].title"
      ],
      "core/audits/accessibility/aria-required-parent.js | description": [
        "audits[aria-required-parent].description"
      ],
      "core/audits/accessibility/aria-roles.js | title": [
        "audits[aria-roles].title"
      ],
      "core/audits/accessibility/aria-roles.js | description": [
        "audits[aria-roles].description"
      ],
      "core/audits/accessibility/aria-text.js | title": [
        "audits[aria-text].title"
      ],
      "core/audits/accessibility/aria-text.js | description": [
        "audits[aria-text].description"
      ],
      "core/audits/accessibility/aria-toggle-field-name.js | title": [
        "audits[aria-toggle-field-name].title"
      ],
      "core/audits/accessibility/aria-toggle-field-name.js | description": [
        "audits[aria-toggle-field-name].description"
      ],
      "core/audits/accessibility/aria-tooltip-name.js | title": [
        "audits[aria-tooltip-name].title"
      ],
      "core/audits/accessibility/aria-tooltip-name.js | description": [
        "audits[aria-tooltip-name].description"
      ],
      "core/audits/accessibility/aria-treeitem-name.js | title": [
        "audits[aria-treeitem-name].title"
      ],
      "core/audits/accessibility/aria-treeitem-name.js | description": [
        "audits[aria-treeitem-name].description"
      ],
      "core/audits/accessibility/aria-valid-attr-value.js | title": [
        "audits[aria-valid-attr-value].title"
      ],
      "core/audits/accessibility/aria-valid-attr-value.js | description": [
        "audits[aria-valid-attr-value].description"
      ],
      "core/audits/accessibility/aria-valid-attr.js | title": [
        "audits[aria-valid-attr].title"
      ],
      "core/audits/accessibility/aria-valid-attr.js | description": [
        "audits[aria-valid-attr].description"
      ],
      "core/audits/accessibility/button-name.js | title": [
        "audits[button-name].title"
      ],
      "core/audits/accessibility/button-name.js | description": [
        "audits[button-name].description"
      ],
      "core/audits/accessibility/bypass.js | title": [
        "audits.bypass.title"
      ],
      "core/audits/accessibility/bypass.js | description": [
        "audits.bypass.description"
      ],
      "core/audits/accessibility/color-contrast.js | failureTitle": [
        "audits[color-contrast].title"
      ],
      "core/audits/accessibility/color-contrast.js | description": [
        "audits[color-contrast].description"
      ],
      "core/audits/accessibility/definition-list.js | title": [
        "audits[definition-list].title"
      ],
      "core/audits/accessibility/definition-list.js | description": [
        "audits[definition-list].description"
      ],
      "core/audits/accessibility/dlitem.js | title": [
        "audits.dlitem.title"
      ],
      "core/audits/accessibility/dlitem.js | description": [
        "audits.dlitem.description"
      ],
      "core/audits/accessibility/document-title.js | title": [
        "audits[document-title].title"
      ],
      "core/audits/accessibility/document-title.js | description": [
        "audits[document-title].description"
      ],
      "core/audits/accessibility/duplicate-id-aria.js | title": [
        "audits[duplicate-id-aria].title"
      ],
      "core/audits/accessibility/duplicate-id-aria.js | description": [
        "audits[duplicate-id-aria].description"
      ],
      "core/audits/accessibility/empty-heading.js | title": [
        "audits[empty-heading].title"
      ],
      "core/audits/accessibility/empty-heading.js | description": [
        "audits[empty-heading].description"
      ],
      "core/audits/accessibility/form-field-multiple-labels.js | title": [
        "audits[form-field-multiple-labels].title"
      ],
      "core/audits/accessibility/form-field-multiple-labels.js | description": [
        "audits[form-field-multiple-labels].description"
      ],
      "core/audits/accessibility/frame-title.js | title": [
        "audits[frame-title].title"
      ],
      "core/audits/accessibility/frame-title.js | description": [
        "audits[frame-title].description"
      ],
      "core/audits/accessibility/heading-order.js | failureTitle": [
        "audits[heading-order].title"
      ],
      "core/audits/accessibility/heading-order.js | description": [
        "audits[heading-order].description"
      ],
      "core/audits/accessibility/html-has-lang.js | title": [
        "audits[html-has-lang].title"
      ],
      "core/audits/accessibility/html-has-lang.js | description": [
        "audits[html-has-lang].description"
      ],
      "core/audits/accessibility/html-lang-valid.js | title": [
        "audits[html-lang-valid].title"
      ],
      "core/audits/accessibility/html-lang-valid.js | description": [
        "audits[html-lang-valid].description"
      ],
      "core/audits/accessibility/html-xml-lang-mismatch.js | title": [
        "audits[html-xml-lang-mismatch].title"
      ],
      "core/audits/accessibility/html-xml-lang-mismatch.js | description": [
        "audits[html-xml-lang-mismatch].description"
      ],
      "core/audits/accessibility/identical-links-same-purpose.js | title": [
        "audits[identical-links-same-purpose].title"
      ],
      "core/audits/accessibility/identical-links-same-purpose.js | description": [
        "audits[identical-links-same-purpose].description"
      ],
      "core/audits/accessibility/image-alt.js | failureTitle": [
        "audits[image-alt].title"
      ],
      "core/audits/accessibility/image-alt.js | description": [
        "audits[image-alt].description"
      ],
      "core/audits/accessibility/image-redundant-alt.js | title": [
        "audits[image-redundant-alt].title"
      ],
      "core/audits/accessibility/image-redundant-alt.js | description": [
        "audits[image-redundant-alt].description"
      ],
      "core/audits/accessibility/input-button-name.js | title": [
        "audits[input-button-name].title"
      ],
      "core/audits/accessibility/input-button-name.js | description": [
        "audits[input-button-name].description"
      ],
      "core/audits/accessibility/input-image-alt.js | title": [
        "audits[input-image-alt].title"
      ],
      "core/audits/accessibility/input-image-alt.js | description": [
        "audits[input-image-alt].description"
      ],
      "core/audits/accessibility/label-content-name-mismatch.js | failureTitle": [
        "audits[label-content-name-mismatch].title"
      ],
      "core/audits/accessibility/label-content-name-mismatch.js | description": [
        "audits[label-content-name-mismatch].description"
      ],
      "core/audits/accessibility/label.js | title": [
        "audits.label.title"
      ],
      "core/audits/accessibility/label.js | description": [
        "audits.label.description"
      ],
      "core/audits/accessibility/landmark-one-main.js | title": [
        "audits[landmark-one-main].title"
      ],
      "core/audits/accessibility/landmark-one-main.js | description": [
        "audits[landmark-one-main].description"
      ],
      "core/audits/accessibility/link-name.js | failureTitle": [
        "audits[link-name].title"
      ],
      "core/audits/accessibility/link-name.js | description": [
        "audits[link-name].description"
      ],
      "core/audits/accessibility/link-in-text-block.js | title": [
        "audits[link-in-text-block].title"
      ],
      "core/audits/accessibility/link-in-text-block.js | description": [
        "audits[link-in-text-block].description"
      ],
      "core/audits/accessibility/list.js | title": [
        "audits.list.title"
      ],
      "core/audits/accessibility/list.js | description": [
        "audits.list.description"
      ],
      "core/audits/accessibility/listitem.js | title": [
        "audits.listitem.title"
      ],
      "core/audits/accessibility/listitem.js | description": [
        "audits.listitem.description"
      ],
      "core/audits/accessibility/meta-refresh.js | title": [
        "audits[meta-refresh].title"
      ],
      "core/audits/accessibility/meta-refresh.js | description": [
        "audits[meta-refresh].description"
      ],
      "core/audits/accessibility/meta-viewport.js | title": [
        "audits[meta-viewport].title"
      ],
      "core/audits/accessibility/meta-viewport.js | description": [
        "audits[meta-viewport].description"
      ],
      "core/audits/accessibility/object-alt.js | title": [
        "audits[object-alt].title"
      ],
      "core/audits/accessibility/object-alt.js | description": [
        "audits[object-alt].description"
      ],
      "core/audits/accessibility/select-name.js | title": [
        "audits[select-name].title"
      ],
      "core/audits/accessibility/select-name.js | description": [
        "audits[select-name].description"
      ],
      "core/audits/accessibility/skip-link.js | failureTitle": [
        "audits[skip-link].title"
      ],
      "core/audits/accessibility/skip-link.js | description": [
        "audits[skip-link].description"
      ],
      "core/audits/accessibility/tabindex.js | title": [
        "audits.tabindex.title"
      ],
      "core/audits/accessibility/tabindex.js | description": [
        "audits.tabindex.description"
      ],
      "core/audits/accessibility/table-duplicate-name.js | title": [
        "audits[table-duplicate-name].title"
      ],
      "core/audits/accessibility/table-duplicate-name.js | description": [
        "audits[table-duplicate-name].description"
      ],
      "core/audits/accessibility/table-fake-caption.js | title": [
        "audits[table-fake-caption].title"
      ],
      "core/audits/accessibility/table-fake-caption.js | description": [
        "audits[table-fake-caption].description"
      ],
      "core/audits/accessibility/target-size.js | title": [
        "audits[target-size].title"
      ],
      "core/audits/accessibility/target-size.js | description": [
        "audits[target-size].description"
      ],
      "core/audits/accessibility/td-has-header.js | title": [
        "audits[td-has-header].title"
      ],
      "core/audits/accessibility/td-has-header.js | description": [
        "audits[td-has-header].description"
      ],
      "core/audits/accessibility/td-headers-attr.js | title": [
        "audits[td-headers-attr].title"
      ],
      "core/audits/accessibility/td-headers-attr.js | description": [
        "audits[td-headers-attr].description"
      ],
      "core/audits/accessibility/th-has-data-cells.js | title": [
        "audits[th-has-data-cells].title"
      ],
      "core/audits/accessibility/th-has-data-cells.js | description": [
        "audits[th-has-data-cells].description"
      ],
      "core/audits/accessibility/valid-lang.js | title": [
        "audits[valid-lang].title"
      ],
      "core/audits/accessibility/valid-lang.js | description": [
        "audits[valid-lang].description"
      ],
      "core/audits/accessibility/video-caption.js | title": [
        "audits[video-caption].title"
      ],
      "core/audits/accessibility/video-caption.js | description": [
        "audits[video-caption].description"
      ],
      "core/audits/byte-efficiency/total-byte-weight.js | failureTitle": [
        "audits[total-byte-weight].title"
      ],
      "core/audits/byte-efficiency/total-byte-weight.js | description": [
        "audits[total-byte-weight].description"
      ],
      "core/audits/byte-efficiency/total-byte-weight.js | displayValue": [
        {
          "values": {
            "totalBytes": 3039061
          },
          "path": "audits[total-byte-weight].displayValue"
        }
      ],
      "core/audits/byte-efficiency/unminified-css.js | title": [
        "audits[unminified-css].title"
      ],
      "core/audits/byte-efficiency/unminified-css.js | description": [
        "audits[unminified-css].description"
      ],
      "core/audits/byte-efficiency/unminified-javascript.js | title": [
        "audits[unminified-javascript].title"
      ],
      "core/audits/byte-efficiency/unminified-javascript.js | description": [
        "audits[unminified-javascript].description"
      ],
      "core/lib/i18n/i18n.js | displayValueByteSavings": [
        {
          "values": {
            "wastedBytes": 290619
          },
          "path": "audits[unminified-javascript].displayValue"
        },
        {
          "values": {
            "wastedBytes": 147559
          },
          "path": "audits[unused-javascript].displayValue"
        },
        {
          "values": {
            "wastedBytes": 238124.13124999998
          },
          "path": "audits[cache-insight].displayValue"
        },
        {
          "values": {
            "wastedBytes": 1874331
          },
          "path": "audits[image-delivery-insight].displayValue"
        }
      ],
      "core/lib/i18n/i18n.js | columnWastedBytes": [
        "audits[unminified-javascript].details.headings[2].label",
        "audits[unused-javascript].details.headings[2].label",
        "audits[font-display-insight].details.headings[1].label",
        "audits[image-delivery-insight].details.headings[3].label"
      ],
      "core/audits/byte-efficiency/unused-css-rules.js | title": [
        "audits[unused-css-rules].title"
      ],
      "core/audits/byte-efficiency/unused-css-rules.js | description": [
        "audits[unused-css-rules].description"
      ],
      "core/audits/byte-efficiency/unused-javascript.js | title": [
        "audits[unused-javascript].title"
      ],
      "core/audits/byte-efficiency/unused-javascript.js | description": [
        "audits[unused-javascript].description"
      ],
      "core/audits/dobetterweb/doctype.js | title": [
        "audits.doctype.title"
      ],
      "core/audits/dobetterweb/doctype.js | description": [
        "audits.doctype.description"
      ],
      "core/audits/dobetterweb/charset.js | title": [
        "audits.charset.title"
      ],
      "core/audits/dobetterweb/charset.js | description": [
        "audits.charset.description"
      ],
      "core/audits/dobetterweb/geolocation-on-start.js | title": [
        "audits[geolocation-on-start].title"
      ],
      "core/audits/dobetterweb/geolocation-on-start.js | description": [
        "audits[geolocation-on-start].description"
      ],
      "core/audits/dobetterweb/inspector-issues.js | title": [
        "audits[inspector-issues].title"
      ],
      "core/audits/dobetterweb/inspector-issues.js | description": [
        "audits[inspector-issues].description"
      ],
      "core/audits/dobetterweb/inspector-issues.js | columnIssueType": [
        "audits[inspector-issues].details.headings[0].label"
      ],
      "core/audits/dobetterweb/js-libraries.js | title": [
        "audits[js-libraries].title"
      ],
      "core/audits/dobetterweb/js-libraries.js | description": [
        "audits[js-libraries].description"
      ],
      "core/audits/dobetterweb/js-libraries.js | columnVersion": [
        "audits[js-libraries].details.headings[1].label"
      ],
      "core/audits/dobetterweb/notification-on-start.js | title": [
        "audits[notification-on-start].title"
      ],
      "core/audits/dobetterweb/notification-on-start.js | description": [
        "audits[notification-on-start].description"
      ],
      "core/audits/dobetterweb/paste-preventing-inputs.js | title": [
        "audits[paste-preventing-inputs].title"
      ],
      "core/audits/dobetterweb/paste-preventing-inputs.js | description": [
        "audits[paste-preventing-inputs].description"
      ],
      "core/audits/seo/meta-description.js | failureTitle": [
        "audits[meta-description].title"
      ],
      "core/audits/seo/meta-description.js | description": [
        "audits[meta-description].description"
      ],
      "core/audits/seo/meta-description.js | explanation": [
        "audits[meta-description].explanation"
      ],
      "core/audits/seo/http-status-code.js | title": [
        "audits[http-status-code].title"
      ],
      "core/audits/seo/http-status-code.js | description": [
        "audits[http-status-code].description"
      ],
      "core/audits/seo/link-text.js | title": [
        "audits[link-text].title"
      ],
      "core/audits/seo/link-text.js | description": [
        "audits[link-text].description"
      ],
      "core/audits/seo/crawlable-anchors.js | title": [
        "audits[crawlable-anchors].title"
      ],
      "core/audits/seo/crawlable-anchors.js | description": [
        "audits[crawlable-anchors].description"
      ],
      "core/audits/seo/crawlable-anchors.js | columnFailingLink": [
        "audits[crawlable-anchors].details.headings[0].label"
      ],
      "core/audits/seo/is-crawlable.js | failureTitle": [
        "audits[is-crawlable].title"
      ],
      "core/audits/seo/is-crawlable.js | description": [
        "audits[is-crawlable].description"
      ],
      "core/audits/seo/robots-txt.js | title": [
        "audits[robots-txt].title"
      ],
      "core/audits/seo/robots-txt.js | description": [
        "audits[robots-txt].description"
      ],
      "core/audits/seo/hreflang.js | title": [
        "audits.hreflang.title"
      ],
      "core/audits/seo/hreflang.js | description": [
        "audits.hreflang.description"
      ],
      "core/audits/seo/canonical.js | title": [
        "audits.canonical.title"
      ],
      "core/audits/seo/canonical.js | description": [
        "audits.canonical.description"
      ],
      "core/audits/seo/manual/structured-data.js | title": [
        "audits[structured-data].title"
      ],
      "core/audits/seo/manual/structured-data.js | description": [
        "audits[structured-data].description"
      ],
      "core/audits/bf-cache.js | title": [
        "audits[bf-cache].title"
      ],
      "core/audits/bf-cache.js | description": [
        "audits[bf-cache].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Cache.js | title": [
        "audits[cache-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Cache.js | description": [
        "audits[cache-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Cache.js | requestColumn": [
        "audits[cache-insight].details.headings[0].label"
      ],
      "core/lib/i18n/i18n.js | columnCacheTTL": [
        "audits[cache-insight].details.headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | title": [
        "audits[cls-culprits-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | description": [
        "audits[cls-culprits-insight].description"
      ],
      "core/audits/insights/cls-culprits-insight.js | columnScore": [
        "audits[cls-culprits-insight].details.items[0].headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/CLSCulprits.js | unsizedImage": [
        "audits[cls-culprits-insight].details.items[0].items[1].subItems.items[0].cause",
        "audits[cls-culprits-insight].details.items[0].items[3].subItems.items[0].cause"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | title": [
        "audits[document-latency-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | description": [
        "audits[document-latency-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | failedRedirects": [
        {
          "values": {
            "PH1": 2,
            "PH2": "66 ms"
          },
          "path": "audits[document-latency-insight].details.items.noRedirects.label"
        }
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | passingServerResponseTime": [
        {
          "values": {
            "PH1": "397 ms"
          },
          "path": "audits[document-latency-insight].details.items.serverResponseIsFast.label"
        }
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DocumentLatency.js | passingTextCompression": [
        "audits[document-latency-insight].details.items.usesCompression.label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | title": [
        "audits[dom-size-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | description": [
        "audits[dom-size-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | statistic": [
        "audits[dom-size-insight].details.headings[0].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | value": [
        "audits[dom-size-insight].details.headings[2].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | totalElements": [
        "audits[dom-size-insight].details.items[0].statistic"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | maxDOMDepth": [
        "audits[dom-size-insight].details.items[1].statistic"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DOMSize.js | maxChildren": [
        "audits[dom-size-insight].details.items[2].statistic"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DuplicatedJavaScript.js | title": [
        "audits[duplicated-javascript-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/DuplicatedJavaScript.js | description": [
        "audits[duplicated-javascript-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/FontDisplay.js | title": [
        "audits[font-display-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/FontDisplay.js | description": [
        "audits[font-display-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ForcedReflow.js | title": [
        "audits[forced-reflow-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ForcedReflow.js | description": [
        "audits[forced-reflow-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ForcedReflow.js | totalReflowTime": [
        "audits[forced-reflow-insight].details.items[0].headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | title": [
        "audits[image-delivery-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | description": [
        "audits[image-delivery-insight].description"
      ],
      "core/lib/i18n/i18n.js | columnResourceSize": [
        "audits[image-delivery-insight].details.headings[2].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useResponsiveSize": [
        {
          "values": {
            "PH1": "4954x3156",
            "PH2": "338x215"
          },
          "path": "audits[image-delivery-insight].details.items[0].subItems.items[0].reason"
        },
        {
          "values": {
            "PH1": "270x271",
            "PH2": "183x183"
          },
          "path": "audits[image-delivery-insight].details.items[1].subItems.items[1].reason"
        },
        {
          "values": {
            "PH1": "270x270",
            "PH2": "183x183"
          },
          "path": "audits[image-delivery-insight].details.items[2].subItems.items[1].reason"
        },
        {
          "values": {
            "PH1": "270x271",
            "PH2": "183x183"
          },
          "path": "audits[image-delivery-insight].details.items[3].subItems.items[1].reason"
        },
        {
          "values": {
            "PH1": "384x216",
            "PH2": "338x190"
          },
          "path": "audits[image-delivery-insight].details.items[4].subItems.items[1].reason"
        }
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ImageDelivery.js | useModernFormat": [
        "audits[image-delivery-insight].details.items[1].subItems.items[0].reason",
        "audits[image-delivery-insight].details.items[2].subItems.items[0].reason",
        "audits[image-delivery-insight].details.items[3].subItems.items[0].reason",
        "audits[image-delivery-insight].details.items[4].subItems.items[0].reason"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/INPBreakdown.js | title": [
        "audits[inp-breakdown-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/INPBreakdown.js | description": [
        "audits[inp-breakdown-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | title": [
        "audits[lcp-breakdown-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | description": [
        "audits[lcp-breakdown-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | subpart": [
        "audits[lcp-breakdown-insight].details.items[0].headings[0].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | timeToFirstByte": [
        "audits[lcp-breakdown-insight].details.items[0].items[0].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | resourceLoadDelay": [
        "audits[lcp-breakdown-insight].details.items[0].items[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | resourceLoadDuration": [
        "audits[lcp-breakdown-insight].details.items[0].items[2].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPBreakdown.js | elementRenderDelay": [
        "audits[lcp-breakdown-insight].details.items[0].items[3].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | title": [
        "audits[lcp-discovery-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | description": [
        "audits[lcp-discovery-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | fetchPriorityShouldBeApplied": [
        "audits[lcp-discovery-insight].details.items[0].items.priorityHinted.label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | requestDiscoverable": [
        "audits[lcp-discovery-insight].details.items[0].items.requestDiscoverable.label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LCPDiscovery.js | lazyLoadNotApplied": [
        "audits[lcp-discovery-insight].details.items[0].items.eagerlyLoaded.label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LegacyJavaScript.js | title": [
        "audits[legacy-javascript-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/LegacyJavaScript.js | description": [
        "audits[legacy-javascript-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ModernHTTP.js | title": [
        "audits[modern-http-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ModernHTTP.js | description": [
        "audits[modern-http-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ModernHTTP.js | protocol": [
        "audits[modern-http-insight].details.headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | title": [
        "audits[network-dependency-tree-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | description": [
        "audits[network-dependency-tree-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | preconnectOriginsTableTitle": [
        "audits[network-dependency-tree-insight].details.items[1].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | preconnectOriginsTableDescription": [
        "audits[network-dependency-tree-insight].details.items[1].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | columnOrigin": [
        "audits[network-dependency-tree-insight].details.items[1].value.headings[0].label",
        "audits[network-dependency-tree-insight].details.items[2].value.headings[0].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | columnSource": [
        "audits[network-dependency-tree-insight].details.items[1].value.headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | crossoriginWarning": [
        "audits[network-dependency-tree-insight].details.items[1].value.items[0].subItems.items[0].warning"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | estSavingTableTitle": [
        "audits[network-dependency-tree-insight].details.items[2].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | estSavingTableDescription": [
        "audits[network-dependency-tree-insight].details.items[2].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/NetworkDependencyTree.js | columnWastedMs": [
        "audits[network-dependency-tree-insight].details.items[2].value.headings[1].label"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/RenderBlocking.js | title": [
        "audits[render-blocking-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/RenderBlocking.js | description": [
        "audits[render-blocking-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ThirdParties.js | title": [
        "audits[third-parties-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/ThirdParties.js | description": [
        "audits[third-parties-insight].description"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Viewport.js | title": [
        "audits[viewport-insight].title"
      ],
      "node_modules/@paulirish/trace_engine/models/trace/insights/Viewport.js | description": [
        "audits[viewport-insight].description"
      ],
      "core/config/default-config.js | performanceCategoryTitle": [
        "categories.performance.title"
      ],
      "core/config/default-config.js | a11yCategoryTitle": [
        "categories.accessibility.title"
      ],
      "core/config/default-config.js | a11yCategoryDescription": [
        "categories.accessibility.description"
      ],
      "core/config/default-config.js | a11yCategoryManualDescription": [
        "categories.accessibility.manualDescription"
      ],
      "core/config/default-config.js | bestPracticesCategoryTitle": [
        "categories[best-practices].title"
      ],
      "core/config/default-config.js | seoCategoryTitle": [
        "categories.seo.title"
      ],
      "core/config/default-config.js | seoCategoryDescription": [
        "categories.seo.description"
      ],
      "core/config/default-config.js | seoCategoryManualDescription": [
        "categories.seo.manualDescription"
      ],
      "core/config/default-config.js | metricGroupTitle": [
        "categoryGroups.metrics.title"
      ],
      "core/config/default-config.js | insightsGroupTitle": [
        "categoryGroups.insights.title"
      ],
      "core/config/default-config.js | insightsGroupDescription": [
        "categoryGroups.insights.description"
      ],
      "core/config/default-config.js | diagnosticsGroupTitle": [
        "categoryGroups.diagnostics.title"
      ],
      "core/config/default-config.js | diagnosticsGroupDescription": [
        "categoryGroups.diagnostics.description"
      ],
      "core/config/default-config.js | a11yBestPracticesGroupTitle": [
        "categoryGroups[a11y-best-practices].title"
      ],
      "core/config/default-config.js | a11yBestPracticesGroupDescription": [
        "categoryGroups[a11y-best-practices].description"
      ],
      "core/config/default-config.js | a11yColorContrastGroupTitle": [
        "categoryGroups[a11y-color-contrast].title"
      ],
      "core/config/default-config.js | a11yColorContrastGroupDescription": [
        "categoryGroups[a11y-color-contrast].description"
      ],
      "core/config/default-config.js | a11yNamesLabelsGroupTitle": [
        "categoryGroups[a11y-names-labels].title"
      ],
      "core/config/default-config.js | a11yNamesLabelsGroupDescription": [
        "categoryGroups[a11y-names-labels].description"
      ],
      "core/config/default-config.js | a11yNavigationGroupTitle": [
        "categoryGroups[a11y-navigation].title"
      ],
      "core/config/default-config.js | a11yNavigationGroupDescription": [
        "categoryGroups[a11y-navigation].description"
      ],
      "core/config/default-config.js | a11yAriaGroupTitle": [
        "categoryGroups[a11y-aria].title"
      ],
      "core/config/default-config.js | a11yAriaGroupDescription": [
        "categoryGroups[a11y-aria].description"
      ],
      "core/config/default-config.js | a11yLanguageGroupTitle": [
        "categoryGroups[a11y-language].title"
      ],
      "core/config/default-config.js | a11yLanguageGroupDescription": [
        "categoryGroups[a11y-language].description"
      ],
      "core/config/default-config.js | a11yAudioVideoGroupTitle": [
        "categoryGroups[a11y-audio-video].title"
      ],
      "core/config/default-config.js | a11yAudioVideoGroupDescription": [
        "categoryGroups[a11y-audio-video].description"
      ],
      "core/config/default-config.js | a11yTablesListsVideoGroupTitle": [
        "categoryGroups[a11y-tables-lists].title"
      ],
      "core/config/default-config.js | a11yTablesListsVideoGroupDescription": [
        "categoryGroups[a11y-tables-lists].description"
      ],
      "core/config/default-config.js | seoMobileGroupTitle": [
        "categoryGroups[seo-mobile].title"
      ],
      "core/config/default-config.js | seoMobileGroupDescription": [
        "categoryGroups[seo-mobile].description"
      ],
      "core/config/default-config.js | seoContentGroupTitle": [
        "categoryGroups[seo-content].title"
      ],
      "core/config/default-config.js | seoContentGroupDescription": [
        "categoryGroups[seo-content].description"
      ],
      "core/config/default-config.js | seoCrawlingGroupTitle": [
        "categoryGroups[seo-crawl].title"
      ],
      "core/config/default-config.js | seoCrawlingGroupDescription": [
        "categoryGroups[seo-crawl].description"
      ],
      "core/config/default-config.js | bestPracticesTrustSafetyGroupTitle": [
        "categoryGroups[best-practices-trust-safety].title"
      ],
      "core/config/default-config.js | bestPracticesUXGroupTitle": [
        "categoryGroups[best-practices-ux].title"
      ],
      "core/config/default-config.js | bestPracticesBrowserCompatGroupTitle": [
        "categoryGroups[best-practices-browser-compat].title"
      ],
      "core/config/default-config.js | bestPracticesGeneralGroupTitle": [
        "categoryGroups[best-practices-general].title"
      ]
    }
  }
}
